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..5b291e6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,1814 @@
+
+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.7.2.jar
+webapps/openmeetings/WEB-INF/lib/api-all-jar-1.0.0-M31.jar
+webapps/openmeetings/WEB-INF/lib/asterisk-java-jar-1.0.0.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-extension-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-ext-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-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.4.2.jar
+webapps/openmeetings/WEB-INF/lib/commons-transaction-jar-1.2.jar
+webapps/openmeetings/WEB-INF/lib/derbyclient-jar-10.12.1.1.jar
+webapps/openmeetings/WEB-INF/lib/derby-jar-10.12.1.1.jar
+webapps/openmeetings/WEB-INF/lib/derbynet-jar-10.12.1.1.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-jms_1.1_spec-jar-1.1.1.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/gson-jar-2.2.4.jar
+webapps/openmeetings/WEB-INF/lib/joda-time-jar-2.7.jar
+webapps/openmeetings/WEB-INF/lib/jqplot4java-jar-1.3.0.jar
+webapps/openmeetings/WEB-INF/lib/jqplot-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/jsmpp-jar-2.1.0.jar
+webapps/openmeetings/WEB-INF/lib/neethi-bundle-3.0.4-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-bundle-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-jdbc-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-jest-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-kernel-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-lib-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-persistence-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-persistence-jdbc-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-slice-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-xmlstore-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/org.apache.servicemix.bundles.antlr-bundle-2.7.7_5.jar
+webapps/openmeetings/WEB-INF/lib/org.apache.servicemix.bundles.dom4j-bundle-1.6.1_5.jar
+webapps/openmeetings/WEB-INF/lib/org.apache.servicemix.bundles.xpp3-bundle-1.1.4c_6.jar
+webapps/openmeetings/WEB-INF/lib/simple-xml-jar-2.7.jar
+webapps/openmeetings/WEB-INF/lib/smslib-jar-3.5.4.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-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-core-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-dashboard-core-jar-0.12.1+wicket-7.jar
+webapps/openmeetings/WEB-INF/lib/wicket-datetime-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-devutils-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-extensions-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-ioc-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-calendar-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-core-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-plugins-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-culture-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-theme-default-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-native-websocket-core-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-native-websocket-javax-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-request-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-html5-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-select2-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-urlfragment-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-util-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/woden-core-bundle-1.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/woodstox-core-asl-jar-4.2.0.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/xbean-asm5-shaded-bundle-3.17.jar
+webapps/openmeetings/WEB-INF/lib/xml-apis-ext-jar-1.3.04.jar
+webapps/openmeetings/WEB-INF/lib/xml-apis-jar-1.0.b2.jar
+webapps/openmeetings/WEB-INF/lib/xmlgraphics-commons-jar-1.4.jar
+webapps/openmeetings/WEB-INF/lib/xml-resolver-jar-1.2.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-core-bundle-2.1.1-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-1203-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.15.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.
+
+
+======================================================================================================================
+
+For ThreeTen library: threetenbp-jar-1.3.1.jar
+
+ * Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos
+ *
+ * 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 JSR-310 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 Json library: json-20090211.jar
+
+Copyright (c) 2002 JSON.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 shall be used for Good, not Evil.
+ 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..8f46dae
--- /dev/null
+++ b/WebContent/src/base/hibernate/hibRtmpConnection.lzx
@@ -0,0 +1,1881 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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.currentClient = value;
+				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);
+				canvas.setAttribute('mail', value.adresses.email);
+				
+				if (canvas.isRemoteUser() && fName == '' && lName == '') {
+					if ($debug) Debug.write("!!!!!!!!!!! Nickname HIB ", value.adresses.email);
+					new lz.chooseNickName(canvas);
+				}
+				hib.userobject.firstname = fName;
+				hib.userobject.lastname = lName;
+				
+				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("getRoomTypes");
+                    parent.getRoomTypes.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 if (!canvas.isRemoteUser()) {
+                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
+				if ($debug) Debug.write("newPoll : ", value);
+				if (canvas.user_id != value.createdBy.user_id) {
+					flash.external.ExternalInterface.call("vote", canvas.publicSID);
+				}
+			]]>
+			</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>
+    
+	<netRemoteCallHib name="nickNameSet" funcname="nickNameSet" >
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("nickNameSet: ", value);
+			canvas.setAttribute('mail', value.email);
+			canvas.setAttribute('firstName', value.firstname);
+			canvas.setAttribute('lastName', value.lastname);
+			
+			var vo = canvas._videocontainer._participants.getUserListItemByPublicSID(value.publicSID);
+			if (vo != null) {
+				vo.update(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..0926bba
--- /dev/null
+++ b/WebContent/src/base/mainAttributes.lzx
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT 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" />
+
+<!--- 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="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" />
+<attribute name="currentClient" value="null" />   
+
+<!--- 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..16e20bd
--- /dev/null
+++ b/WebContent/src/base/mainMethods.lzx
@@ -0,0 +1,1033 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT 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") {
+            	 	flash.external.ExternalInterface.call("openInvitation");
+			    } else if (stringSub=='editWhiteboardDefault') {
+                    new lz.editWhiteboardDefault(canvas.main_content._content.inner);
+                } else if (stringSub=='createPoll') {
+                    flash.external.ExternalInterface.call("createPoll", canvas.publicSID);
+                } else if (stringSub=='pollResults') {
+                    flash.external.ExternalInterface.call("pollResults", canvas.publicSID);
+                } else if (stringSub=='checkPollVoted') {
+                    flash.external.ExternalInterface.call("vote");
+                } 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>
+    
+    <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">
+		canvas.localConnectionSendQ.push({cName: lc_name, mName: methodName, tArray: tArray});
+	</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..06d727f
--- /dev/null
+++ b/WebContent/src/main.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.
+  
+-->
+<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" />
+<attribute name="localConnectionSendQ" type="object" value="null" />
+<attribute name="localConnectionQProcessorDelegate" type="object" value="null"/>
+
+	<!-- 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();
+		localConnectionSendQ = new Array();
+		if($debug) Debug.write("canvas.lc: ", canvas.lc);
+		localConnectionQProcessorDelegate = new LzDelegate(parent, "processLocalQ");
+		lz.Timer.addTimer(localConnectionQProcessorDelegate, 0);
+		canvas.lc.onStatus = function(obj:flash.events.StatusEvent) {
+			if (obj.level == 'error') {
+				if($debug) Debug.warn("LocalConnection:: error while sending ", obj);
+			} else {
+				var sm = localConnectionSendQ.shift();
+				if (sm) {
+					realSendViaLocalConnection(sm.cName, sm.mName, sm.tArray);
+				} else {
+					lz.Timer.resetTimer(localConnectionQProcessorDelegate, 100);
+				}
+			}
+		}
+	
+		getTimeZoneOffset(this);
+	</handler>
+	
+	<method name="processLocalQ" args="none">
+	<![CDATA[
+		//if ($debug) Debug.info("  ::processLocalQ !!!!! ");
+		if (localConnectionSendQ.length > 0) {
+			var sm = localConnectionSendQ.shift();
+			realSendViaLocalConnection(sm.cName, sm.mName, sm.tArray);
+		} else {
+			lz.Timer.resetTimer(localConnectionQProcessorDelegate, 100);
+		}
+	]]>
+	</method>
+
+	<method name="realSendViaLocalConnection" args="lc_name,methodName,tArray">
+	<![CDATA[
+		var so:SharedObject = SharedObject.getLocal("__getObjectSizeHelper");
+		so.data.o = tArray;
+		var size:Number = so.getSize();
+		so.clear();
+		if (size > 10000 && size < 30001) {
+			if ($debug) Debug.warn("Too big object being sent via localConnection::10K warn ", size); //,tArray
+		} else if (size > 30000) {
+			if ($debug) Debug.error("Too big object being sent via localConnection ", size); //,tArray
+			return;
+		}
+		if ($debug) Debug.info("sendViaLocalConnection ", lc_name, methodName, size); //,tArray
+		try{
+			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")
+			}
+		} catch(e:Error) {
+			if ($debug) Debug.error("Error while sending ", e);
+		}
+	]]>
+	</method>
+
+<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..0e082e1
--- /dev/null
+++ b/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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>
+
+	<method name="batchCreateVideo" args="selfStreamId, clients">
+		canvas.sendViaLocalConnection(canvas.vid_lc_name, "batchCreateVideo", [selfStreamId, clients]);
+	</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..ed89fa0
--- /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.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..6ebe8c9
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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="update" args="obj">
+    	setAttribute('firstname', obj.firstname);
+    	setAttribute('lastname', obj.lastname);
+    	refObj = obj;
+    </method>
+     
+    <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..c4e238d
--- /dev/null
+++ b/WebContent/src/modules/conference/library.lzx
@@ -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.
+  
+-->
+<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="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..cc2d74c
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participantListItem.lzx
@@ -0,0 +1,637 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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="update" args="obj">
+    	setAttribute('firstname', obj.firstname);
+    	setAttribute('lastname', obj.lastname);
+    	refObj = obj;
+    </method>
+     
+    <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/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..66b2b09
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/chooseNickName.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="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);
+		this.mail.setAttribute("text", canvas.mail);
+	]]>
+	</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..3dcb693
--- /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 Remote: ",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 Remote: ",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..469e42e
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserList.lzx
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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" />
+	<attribute name="timeout" value="500" type="number"/>
+	<attribute name="batchSize" value="10" type="number"/>
+	<attribute name="counter" value="0" type="number"/>
+	<attribute name="batchCreateVideoDelegate" type="object" value="null"/>
+	<attribute name="initClients" type="object" />
+    
+    <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;
+                }
+				parent.addItemInitial(value[i]);
+			}
+			parent.batchCreateVideoDelegate = new LzDelegate(parent, "batchCreateVideo");
+			parent.counter = 0;
+			parent.initClients = value;
+			lz.Timer.addTimer(parent.batchCreateVideoDelegate, 0);
+            
+            //Render and Show User-List
+            parent._participants.sortAndRenderList();
+            
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+		]]>
+        </handler>  
+    </netRemoteCallHib>
+
+	<method name="batchCreateVideo" args="none">
+	<![CDATA[
+		if ($debug) Debug.write("interval 0 :: ", counter, initClients.length);
+		if (!batchCreateVideoDelegate) {
+			return;
+		}
+		var cl = new Array();
+		for (var i = 0; i < batchSize; ++i) {
+			cl[i] = initClients[counter++];
+			if (counter == initClients.length) {
+				break;
+			}
+		}
+		if ($debug) Debug.write("interval:: ", counter, cl.length);
+		this._videoviewcontent.batchCreateVideo(canvas.streamid, cl);
+		if (counter == initClients.length) {
+			lz.Timer.removeTimer(batchCreateVideoDelegate);
+			batchCreateVideoDelegate = null;
+			
+			//this content must be inited _after_ setting the default values
+			canvas.thishib.getCurrentModeratorList.doCall();
+			//FIXME Issue-1076
+			canvas.thishib.checkLzRecording.doCall();
+		} else {
+			lz.Timer.resetTimer(batchCreateVideoDelegate, timeout);
+		}
+	]]>
+	</method>
+
+    <!-- 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="object">
+	<![CDATA[
+		//if ($debug) Debug.write("initializeStreams addItem: ", object);
+		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) {
+			this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, -1, object);
+		}
+		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..d077a93
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx
@@ -0,0 +1,521 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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);
+			if (canvas.currentClient) {
+				canvas.currentClient.isMod = m;
+			}
+			this.updateIcons(canvas.currentClient);
+		</handler>
+        
+		<handler name="onmicMutedStatusChangedItem" reference="canvas" args="roomClientObj">
+			updateIcons(roomClientObj);
+		</handler>
+        
+		<handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+			updateIcons(drawObject);
+		</handler>
+
+		<handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+			updateIcons(rclObject);
+		</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);
+			}
+			updateIcons(userObject);
+		]]>
+		</handler>
+        
+		<method name="updateIcons" args="userObject">
+		<![CDATA[
+			if ($debug) Debug.write(" :: updateIcons :: ", userObject);
+			if (!userObject) return;
+			
+			var vList = parent._table.renderList;
+			for (var i = 0; i < vList.length; ++i) {
+				if (vList[i].publicSID == userObject.publicSID) {
+					if ($debug) Debug.write(" :: updateIcons :: item1 found: ", vList[i]);
+					vList[i].isBroadcasting = userObject.isBroadcasting;
+					vList[i].canDraw = userObject.canDraw;
+					vList[i].canShare = userObject.canShare;
+					vList[i].canRemote = userObject.canRemote;
+					vList[i].canGiveAudio = userObject.canGiveAudio;
+					vList[i].micMuted = userObject.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) {
+				if (vList[i].refObj.publicSID == userObject.publicSID) {
+					if ($debug) Debug.write(" :: updateIcons :: item2 found: ", vList[i]);
+					vList[i].refObj.isBroadcasting = userObject.isBroadcasting;
+					vList[i].isBroadcasting = userObject.isBroadcasting;
+					vList[i].refObj.canDraw = userObject.canDraw;
+					vList[i].canDraw = userObject.canDraw;
+					vList[i].refObj.canShare = userObject.canShare;
+					vList[i].canShare = userObject.canShare;
+					vList[i].refObj.canRemote = userObject.canRemote;
+					vList[i].canRemote = userObject.canRemote;
+					vList[i].refObj.canGiveAudio = userObject.canGiveAudio;
+					vList[i].canGiveAudio = userObject.canGiveAudio;
+					vList[i].refObj.micMuted = userObject.micMuted;
+					vList[i].micMuted = userObject.micMuted;
+					vList[i].updateIconByModScroll();
+					vList[i].updateModeratorIcons();
+					break;
+				}
+			}
+			
+			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..3daba41
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES 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"/>
+    
+    <method name="update" args="obj">
+    	setAttribute('firstname', obj.firstname);
+    	setAttribute('lastname', obj.lastname);
+    	refObj = obj;
+    </method>
+     
+    <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..3400b41
--- /dev/null
+++ b/WebContent/src/modules/invitation/invitationQuickLoader.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.
+  
+-->
+<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('mail', email);
+			if (!invitee.firstname && !invitee.lastname) {
+				if ($debug) Debug.write("!!!!!!!!!!! Nickname invitation ", email);
+				new lz.chooseNickName(canvas);
+			}
+			canvas.setAttribute('firstName', fName);
+			canvas.setAttribute('lastName', lName);
+			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) {
+				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/library.lzx b/WebContent/src/modules/invitation/library.lzx
new file mode 100644
index 0000000..481ae54
--- /dev/null
+++ b/WebContent/src/modules/invitation/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="autoloaderBarOnly.lzx" />
+	<include href="invitationQuickLoader.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..11e9802
--- /dev/null
+++ b/WebContent/swf10/commonVideoViewContentSWF10.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>
+
+
+<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.batchCreateVideo = this.batchCreateVideo;
+            client.getVideoObjectByPublicSID = this.getVideoObjectByPublicSID;
+            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, canvas.userobject);
+		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 name="batchCreateVideo" args="selfStreamId, clients">
+	<![CDATA[
+		if ($debug) Debug.info("batchCreateVideo: ", selfStreamId, clients.length);
+		for (var i = 0; i < clients.length; ++i) {
+			var c = clients[i];
+			if (c.streamid != selfStreamId) {
+				if (c.isBroadcasting) {
+					createVideo(c.publicSID, c.firstname + ' ' + c.lastname, c.broadCastID, c.avsettings, -1, c);
+				} else {
+					createVideoObject(c.publicSID, false, -1, c);
+				}
+			}
+		}
+	]]>
+	</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[
+            //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[
+		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 = closeStreamclient(publicSID);
+		if (obj == null) {
+			if ($debug) Debug.warn("Could Not find this To disconnect",publicSID);
+		} else {
+			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();
+		}
+		if (canvas.publicSID == publicSID && canvas.inner.editRecordStream != null) {
+			canvas.inner.editRecordStream.cleanVideos();
+			canvas.inner.editRecordStream.destroy();
+			canvas.inner.editRecordStream = null;
+		}
+		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..51c0235
--- /dev/null
+++ b/WebContent/swf10/main.as3.lzx
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT 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);
+		canvas.currentRoomObject = new Object();
+
+        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..426392d
--- /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 (isMicrophonesRoom) {
+                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..7f90ec1
--- /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.8
+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..fe62a92
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,1495 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT 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="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="docs.src" value="${basedir}/xdocs" />
+	<property name="docs.dest" value="${dist.webapps.dir}/docs" />
+
+	<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="${docs.src}/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>
+		<copy todir="${docs.dest}/js">
+			<fileset dir="${docs.src}/js/">
+				<include name="**/*.js" />
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.only.webservice.doc" depends="anakia">
+		<javadoc classpathref="build.webservice.classpath" useexternalfile="true" destdir="${docs.dest}">
+			<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>
+	</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}" />
+			<param name="ivy.transitive" value="true" />
+		</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/ivy.xml b/ivy.xml
new file mode 100644
index 0000000..393c679
--- /dev/null
+++ b/ivy.xml
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT 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.12.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derbyclient" rev="10.12.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derbynet" rev="10.12.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.postgresql" name="postgresql" rev="9.4-1203-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="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-util" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-core" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-auth-roles" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-ioc" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-extensions" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-datetime" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="joda-time" name="joda-time" rev="2.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-devutils" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-native-websocket-core" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-native-websocket-javax" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-core" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-calendar" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-plugins" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-theme-default" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-culture" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="org.threeten" name="threetenbp" rev="1.3.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="ro.fortsoft.wicket.dashboard" name="wicket-dashboard-core" rev="0.13.0+wicket-7" 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="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-html5" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-select2" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="jqplot" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="br.com.digilabs.jqplot" name="jqplot4java" rev="1.3.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.json" name="json" rev="20090211" 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" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.directory.api" name="api-all" rev="1.0.0-M32" 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="junit" name="junit" rev="4.12" conf="junit->*" transitive="true">
+			<include type="jar" />
+		</dependency>
+		<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>
+		<dependency org="org.seleniumhq.selenium" name="selenium-java" conf="junit->*" rev="2.48.2" transitive="true">
+			<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..b17538f
--- /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.20.2-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..44f1256
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java
@@ -0,0 +1,543 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.AppointmentCategoryDTO;
+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.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<AppointmentCategoryDTO> getAppointmentCategoryList(String SID) {
+		log.debug("AppointmenetCategoryService.getAppointmentCategoryList SID : " + SID);
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return AppointmentCategoryDTO.list(appointmentCategoryDao.getAppointmentCategoryList());
+			} 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..289a8d6
--- /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.AppointmentCategoryDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentReminderTypeDTO;
+
+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<AppointmentCategoryDTO> 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..c38ace8
--- /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 //closed
+						, "", "", 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 //closed
+						, "", "", 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 //closed
+						, "", "",
+						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 //closed
+						, "", "",
+						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, // closed
+						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..443f8c1
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.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.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) {
+		if (invitation.getId() == null) {
+			invitation.setInserted(new Date());
+			em.persist(invitation);
+		} else {
+			invitation.setUpdated(new Date());
+			invitation = em.merge(invitation);
+		}
+		return invitation;
+	}
+	
+	public Invitation get(Long invId) {
+		try {
+			
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationbyId", Invitation.class);
+			query.setParameter("id", 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..2388ca6
--- /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("[getPollListBackup]", err);
+		}
+		return null;
+	}
+	
+	public List<RoomPoll> getArchivedPollList(Long room_id) {
+		try {
+			log.debug(" :: getArchivedPollList :: " + 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("[getArchivedPollList]", 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("[hasPoll]", 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("[hasVoted]", 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..b0f23e6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.user.UserContact;
+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, 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 = update(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 UserContact get(Long userId, Long ownerId) {
+		List<UserContact> ll = em.createNamedQuery("getContactByUserOwner", UserContact.class)
+				.setParameter("userId", userId)
+				.setParameter("ownerId", ownerId)
+				.getResultList();
+		log.info("number of contacts:: " + ll.size());
+		return ll != null && ll.size() == 1 ? ll.get(0) : null;
+	}
+	
+	public boolean isContact(Long userId, Long ownerId) {
+		UserContact c = get(userId, ownerId);
+		return c == null ? false : !c.isPending();
+	}
+	
+	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> get() {
+		return em.createNamedQuery("getUserContacts", UserContact.class).getResultList();
+	}
+	
+	public Long updateContactStatus(Long userContactId, Boolean pending) {
+		try {
+			UserContact userContacts = get(userContactId);
+			userContacts.setPending(pending);
+			update(userContacts);
+			return userContactId;
+		} catch (Exception e) {
+			log.error("[updateContactStatus]",e);
+		}
+		return null;
+	}
+	
+	public UserContact update(UserContact c) {
+		if (c.getUserContactId() == 0) {
+			c.setInserted(new Date());
+			em.persist(c);
+		} else {
+			c.setUpdated(new Date());
+			em.merge(c);
+		}
+		return c;
+	}
+}
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/AppointmentCategoryDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentCategoryDTO.java
new file mode 100644
index 0000000..b4f663b
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentCategoryDTO.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.db.dto.calendar;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+
+public class AppointmentCategoryDTO {
+	private Long id;
+	private String name;
+	private Date inserted;
+	private Date updated;
+	private boolean deleted;
+	private String comment;
+	
+	public AppointmentCategoryDTO() {}
+	
+	public AppointmentCategoryDTO(AppointmentCategory c) {
+		this.id = c.getCategoryId();
+		this.name = c.getName();
+		this.inserted = c.getStarttime();
+		this.updated = c.getUpdatetime();
+		this.deleted = c.getDeleted();
+		this.comment = c.getComment();
+	}
+
+	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 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 String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+	
+	public static List<AppointmentCategoryDTO> list(List<AppointmentCategory> l) {
+		List<AppointmentCategoryDTO> rList = new ArrayList<>();
+		if (l != null) {
+			for (AppointmentCategory c : l) {
+				rList.add(new AppointmentCategoryDTO(c));
+			}
+		}
+		return rList;
+	}
+}
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..ee6eb28
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.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.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;
+	private Integer width;
+	private Integer height;
+
+	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();
+		this.width = r.getWidth();
+		this.height = r.getHeight();
+	}
+
+	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 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 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..9a1d127
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
@@ -0,0 +1,253 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 boolean closed;
+	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());
+		closed = r.getIsClosed();
+		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 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;
+	}
+
+	public boolean isClosed() {
+		return closed;
+	}
+
+	public void setClosed(boolean closed) {
+		this.closed = closed;
+	}
+
+	public static List<RoomDTO> list(List<Room> l) {
+		List<RoomDTO> rList = new ArrayList<>();
+		if (l != null) {
+			for (Room r : l) {
+				rList.add(new RoomDTO(r));
+			}
+		}
+		return rList;
+	}
+}
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..a6506eb
--- /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 DESC")
+	, @NamedQuery(name = "getGlobalChatMessages", query = "SELECT DISTINCT c FROM ChatMessage c WHERE c.toUser IS NULL ORDER BY c.sent DESC")
+})@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..9b345f5
--- /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..a514cc4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.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.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 javax.persistence.Transient;
+
+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 = :id"),
+	@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
+	@Transient
+	private boolean allowEntry = true;
+	
+	public Invitation() {}
+	
+	public Invitation(Invitation i) {
+		id = i.id;
+		invitedBy = i.invitedBy;
+		inserted = i.inserted;
+		updated = i.updated;
+		deleted = i.deleted;
+		room = i.room;
+		hash = i.hash;
+		invitee = i.invitee;
+		passwordProtected = i.passwordProtected;
+		password = i.password;
+		valid = i.valid;
+		validFrom = i.validFrom;
+		validTo = i.validTo;
+		used = i.used;
+		appointment = i.appointment;
+	}
+	
+	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..b70b19e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/PollType.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.db.entity.room;
+
+import java.io.Serializable;
+
+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 implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@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..75568d0
--- /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..1214eea
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.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.db.entity.room;
+
+import java.io.Serializable;
+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 implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@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..b5eea3e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.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 implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@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..d03253a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.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.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 javax.xml.bind.annotation.XmlType;
+
+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 = 1L;
+	
+	@XmlType(namespace="org.apache.openmeetings.user.asterisk")
+	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..9a73f1c
--- /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..16f4687
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.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.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 = "getContactByUserOwner", query = "SELECT c FROM UserContact c WHERE c.contact.user_id = :userId AND c.owner.user_id = :ownerId AND c.contact.deleted = false"),
+	@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 isPending() {
+		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..fc23e14
--- /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 = "dist/red5/webapps/openmeetings/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..863697b
--- /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.get());
+			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..febfe30
--- /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()) {
+    						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..71bc506
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java
@@ -0,0 +1,307 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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())) {
+								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..7133dda
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/MainService.java
@@ -0,0 +1,561 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+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 = 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());
+
+			sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+			scopeApplicationAdapter.sendMessageToCurrentScope("nickNameSet", currentClient, true);
+
+			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 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/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..fedbc0c
--- /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.update(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..6546840
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.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.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 = sessionManager.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				if (currentClient.getIsMod()) {
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanDraw(canDraw);
+						sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						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 = sessionManager.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				if (currentClient.getIsMod()) {
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanShare(canShare);
+						sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						scopeApplicationAdapter.sendMessageWithClientWithSyncObject(newMessage, true);
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+		} catch (Exception err) {
+			log.error("[setCanShare]", 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..46c710e
--- /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()) {
+                    // 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();
+							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()) {
+						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()) {
+									// 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()) {
+					} 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..3b4b0d8
--- /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()) {
+						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()) {
+						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..df6cc2e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/derby_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.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" />
+			<!-- 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/mssql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
new file mode 100644
index 0000000..abc9e4e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -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.
+  
+-->
+<!-- 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" />
+			<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/mysql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
new file mode 100644
index 0000000..8094550
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/mysql_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.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, 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/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..18a979f
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/logback-config.xml
@@ -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.
+  
+-->
+
+<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" />
+	<logger name="org.apache.wicket" level="WARN" />
+	<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..5a3e400
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT 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="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..9d072e1
--- /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.apache.wicket.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..0c2901e
--- /dev/null
+++ b/src/main/webapp/css/forms.css
@@ -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.
+ */
+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 div {
+	background: url(images/forms/cancel_icon.png) no-repeat;
+	display: inline-block;
+	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..97641bc
--- /dev/null
+++ b/src/main/webapp/css/theme.css
@@ -0,0 +1,624 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT 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;
+	white-space: nowrap;
+}
+
+#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;
+}
+.invitees.select2-container-multi .select2-choices {
+	max-height: 80px;
+	overflow-y: auto;
+}
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..ac7836b
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java
@@ -0,0 +1,307 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.quartz.SimpleScheduleBuilder.simpleSchedule;
+import static org.quartz.impl.StdSchedulerFactory.PROP_SCHED_SKIP_UPDATE_CHECK;
+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.Properties;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+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.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 AtomicInteger timestamp = new AtomicInteger(0);
+	private volatile AtomicBoolean sendFrameGuard = new AtomicBoolean(false);
+	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;
+		final Properties p = new Properties();
+		p.put(PROP_SCHED_SKIP_UPDATE_CHECK, "true");
+		p.put("org.quartz.threadPool.threadCount", "10");
+		try {
+			SchedulerFactory sf = new StdSchedulerFactory(p);
+			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 = new AtomicInteger(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(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(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("encode: 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 = 0;
+			if (log.isTraceEnabled()) {
+				start = System.currentTimeMillis();
+			}
+			image = ScreenV1Encoder.getImage(screen, robot);
+			if (log.isTraceEnabled()) {
+				log.trace(String.format("encode: Image was captured in %s ms, size %sk", System.currentTimeMillis() - start, 4 * image.length * image[0].length / 1024));
+				start = System.currentTimeMillis();
+			}
+			try {
+				VideoData vData = capture.se.encode(image);
+				if (log.isTraceEnabled()) {
+					long now = System.currentTimeMillis();
+					log.trace(String.format("encode: 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);
+			capture.sendFrameGuard.set(true);
+			if (log.isTraceEnabled()) {
+				long real = System.currentTimeMillis() - capture.timeCaptureStarted;
+				log.trace(String.format("send: Enter method, timestamp: %s, real: %s, diff: %s", capture.timestamp, real, real - capture.timestamp.get()));
+			}
+			VideoData f = capture.frames.poll();
+			if (log.isTraceEnabled()) {
+				log.trace(String.format("send: Getting %s image", f == null ? "DUMMY" : "CAPTURED"));
+			}
+			f = f == null ? capture.se.getUnalteredFrame() : f;
+			if (f != null) {
+				try {
+					capture.pushVideo(f, capture.timestamp.get());
+					if (log.isTraceEnabled()) {
+						long real = System.currentTimeMillis() - capture.timeCaptureStarted;
+						log.trace(String.format("send: Sending video %sk, timestamp: %s, real: %s, diff: %s", f.getData().capacity() / 1024, capture.timestamp, real, real - capture.timestamp.get()));
+					}
+					capture.timestamp.addAndGet(capture.timeBetweenFrames);
+					if (log.isTraceEnabled()) {
+						log.trace(String.format("send: new timestamp: %s", capture.timestamp));
+					}
+				} catch (IOException e) {
+					log.error("Error while sending: ", e);
+				}
+			} else if (log.isTraceEnabled()) {
+				log.trace(String.format("send: nothing to send"));
+			}
+			capture.sendFrameGuard.set(false);
+		}
+	}
+	
+	@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);
+			if (!capture.sendFrameGuard.get()) {
+				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(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, 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..42e5ad4
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
@@ -0,0 +1,779 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+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;
+	}
+	
+	public void setDeadlockGuard(RTMPConnection conn) {
+		ThreadPoolTaskScheduler deadlockGuard = new ThreadPoolTaskScheduler();
+		deadlockGuard.setPoolSize(16);
+		deadlockGuard.setDaemon(false);
+		deadlockGuard.setWaitForTasksToCompleteOnShutdown(true);
+		deadlockGuard.setThreadNamePrefix("DeadlockGuardScheduler-");
+		deadlockGuard.afterPropertiesSet();
+		conn.setDeadlockGuardScheduler(deadlockGuard);
+	}
+}
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..fa3ce07
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 final CoreScreenShare core;
+
+	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);
+		core.setDeadlockGuard(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..c4841f0
--- /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 final CoreScreenShare core;
+
+	public RTMPScreenShare(CoreScreenShare core) {
+		this.core = core;
+	}
+
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		core.setDeadlockGuard(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..450676d
--- /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 final CoreScreenShare core;
+
+	public RTMPTScreenShare(CoreScreenShare core) {
+		this.core = core;
+	};
+
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		core.setDeadlockGuard(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..68c344a
--- /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, ZoneId.SHORT_IDS);
+	}
+	
+	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..8538edf
--- /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">
+			<div wicket:id="ajax-cancel-button" wicket:message="title:157"></div>
+		</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..71c41ea
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.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.admin;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+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;
+	private final Form<T> form;
+	
+	public AdminSavePanel(String id, final Form<T> form) {
+		super(id, form);
+		this.form = 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);
+			}
+		});
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		// add a cancel button that can be used to submit the form via ajax
+		add(new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("833"), form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				hideNewRecord();
+				onDeleteError(target, form);
+			}
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				hideNewRecord();
+				onDeleteSubmit(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..a30b711
--- /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, "change") {
+				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..d69e346
--- /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
+		add(new AjaxFormValidatingBehavior("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..ad96c32
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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("click") {
+					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..2730cac
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -0,0 +1,218 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.ConfirmableAjaxBorder;
+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.core.request.handler.IPartialPageRequestHandler;
+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.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 ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						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("click") {
+					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 ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						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("click") {
+					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(IPartialPageRequestHandler 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..83be7da
--- /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
+		add(new AjaxFormValidatingBehavior("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..42d988d
--- /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"></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..f3058c4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.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.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.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.behavior.AttributeAppender;
+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.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 ConfirmableAjaxBorder("deleteUserBtn", getString("80"), getString("833")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						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..91dd411
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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("click") {
+					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..c64ab4e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.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.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.ConfirmableAjaxBorder;
+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.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+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 ChoiceRenderer<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 ConfirmableAjaxBorder("deleteLangBtn", getString("80"), getString("833")) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				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
+		add(new AjaxFormValidatingBehavior("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..f5417dd
--- /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"></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..2e39cc9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
@@ -0,0 +1,231 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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("click") {
+					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, "change") {
+			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..4c6eea8
--- /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
+		add(new AjaxFormValidatingBehavior("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..df9c9e9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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("click") {
+					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..d2e361e
--- /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
+		add(new AjaxFormValidatingBehavior("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..8fd922a
--- /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("click") {
+
+					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..a0849f0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -0,0 +1,378 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+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.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.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 ChoiceRenderer<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 ConfirmableAjaxBorder("clientDelete", getString("80"), getString("833")) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+							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 ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+							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
+		add(new AjaxFormValidatingBehavior("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..bbf053a
--- /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"></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"></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..09a2b8d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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("click") {
+					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..d2ded20
--- /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
+		add(new AjaxFormValidatingBehavior("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..1461422
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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("click") {
+					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..a66a29c
--- /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.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.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
+		add(new AjaxFormValidatingBehavior("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 ChoiceRenderer<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..e9c75ce
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler target, DialogButton button) {
+		}
+	};
+
+	@Override
+	public void onMenuPanelLoad(IPartialPageRequestHandler 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("click") {
+					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..a1a9f10
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application.java
@@ -0,0 +1,354 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 org.wicketstuff.select2.ApplicationSettings;
+
+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());
+		
+		ApplicationSettings.get().setIncludeJqueryUI(false);
+		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..c2bae0a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/WebSession.java
@@ -0,0 +1,510 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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";
+	public static final String INVITATION_HASH = "invitationHash";
+	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(INVITATION_HASH);
+			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..b43611f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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..c5465c4
--- /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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler target) {
+	}
+
+	/**
+	 * This method should be overridden to perform necessary cleanup: remove timers etc.
+	 * 
+	 * @param target
+	 */
+	public void cleanup(IPartialPageRequestHandler 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..b62a934
--- /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 = 1L;
+
+	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 (u.getShowContactData()) {
+					return 1L;
+				} else if (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/ConfirmableAjaxBorder.html b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
new file mode 100644
index 0000000..722a21b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
@@ -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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:border>
+	<wicket:body/>
+	<form wicket:id="form" style="display: inline;"><div wicket:id="dialog"></div></form>
+</wicket:border>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
new file mode 100644
index 0000000..98a6639
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.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.web.common;
+
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.border.Border;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+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.MessageFormDialog;
+
+public abstract class ConfirmableAjaxBorder extends Border {
+	private static final long serialVersionUID = 1L;
+	private final Form<?> form = new Form<>("form");
+	private final Form<?> userForm;
+	private final IModel<String> title;
+	private final IModel<String> message;
+
+	public ConfirmableAjaxBorder(String id, String title, String message) {
+		this(id, Model.of(title), Model.of(message), null);
+	}
+	
+	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
+		this(id, Model.of(title), Model.of(message), form);
+	}
+	
+	public ConfirmableAjaxBorder(String id, IModel<String> title, IModel<String> message, Form<?> form) {
+		super(id, message);
+		this.title = title;
+		this.message = message;
+		this.userForm = form;
+		setOutputMarkupId(true);
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		final AbstractFormDialog<?> dialog = newFormDialog("dialog", title, message);
+		add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				dialog.open(target);
+			}
+		});
+		addToBorder(form.add(dialog));
+	}
+
+	/**
+	 * Triggered when the form is submitted, but the validation failed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected void onError(AjaxRequestTarget target, Form<?> form) {
+	}
+
+	/**
+	 * Triggered when the form is submitted, and the validation succeed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form);
+
+	// Factories //
+
+	/**
+	 * Create the dialog instance<br/>
+	 * <b>Warning:</b> to be overridden with care!
+	 *
+	 * @param id the markupId
+	 * @param title the title of the dialog
+	 * @param message the message to be displayed
+	 * @return the dialog instance
+	 */
+	protected AbstractFormDialog<?> newFormDialog(String id, IModel<String> title, IModel<String> message) {
+		return new MessageFormDialog(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected DialogButton getSubmitButton() {
+				return this.findButton(OK);
+			}
+
+			@Override
+			public Form<?> getForm() {
+				return userForm == null ? form : userForm;
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target) {
+				super.close(target, null); // closes the dialog on error.
+				ConfirmableAjaxBorder.this.onError(target, this.getForm());
+			}
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				ConfirmableAjaxBorder.this.onSubmit(target, this.getForm());
+			}
+		};
+	}
+	
+	@Override
+	protected void onDetach() {
+		super.onDetach();
+		title.detach();
+		message.detach();
+	}
+}
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..784a662
--- /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.core.request.handler.IPartialPageRequestHandler;
+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.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 ChoiceRenderer<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("change") {
+				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(IPartialPageRequestHandler 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..1ba8748
--- /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.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+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 ChoiceRenderer<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..a6e39cd
--- /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).setParameters(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..1e22329
--- /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("change") {
+					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..f4b7469
--- /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" style="width: 125px;"/><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..a77525d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.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.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.io.InputStream;
+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 = 1L;
+	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 WebMarkupContainer("img").add(AttributeModifier.append("alt", Application.getString(5L)), AttributeModifier.append("src", uri)));
+		} else {
+			profile.add(new Image("img", 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 = getBean(UserDao.class).get(userId).getPictureuri();
+					File img = OmFileHelper.getUserProfilePicture(userId, uri);
+					try (InputStream is = new FileInputStream(img)) {
+						return IOUtils.toByteArray(is);
+					} 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..4614695
--- /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, "change") {
+			private static final long serialVersionUID = 1L;
+
+			@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..bf5684c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.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.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;
+
+public class OmOrderByBorder<T extends IDataProviderEntity> extends AjaxFallbackOrderByBorder<String> {
+	private static final long serialVersionUID = 1L;
+	private DataViewContainer<T> container;
+	
+	public OmOrderByBorder(final String id, final String property, DataViewContainer<T> container) {
+		super(id, property, container.view.getDataProvider());
+		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());
+	}
+}
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..da13327
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.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.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;
+	public static 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 (user != null && !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..6788cfe
--- /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" href="#"><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..c27beb3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
@@ -0,0 +1,190 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.ConfirmableAjaxBorder;
+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.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.devutils.debugbar.DebugBar;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+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 final Component dev;
+	
+	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 ConfirmableAjaxBorder("logout", getString("310"), getString("634")) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				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 {
+			dev = null;
+		    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, IPartialPageRequestHandler target) {
+		updateContents(f, target, true);
+	}
+	
+	public void updateContents(OmUrlFragment f, IPartialPageRequestHandler 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);
+		}
+		/* FIXME commented until wicket 7.2.0 will be released
+		   TODO check if this call is necessary
+		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..4cc444e
--- /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.room.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..5f22cbc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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..fb4a7b9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.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.pages.auth;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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..8da36b8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -0,0 +1,289 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.CalendarPatterns.getDateWithTimeByMiliSeconds;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.crypt.ManageCryptStyle.getInstanceOfCrypt;
+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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler handler, DialogButton button) {
+				s.open(handler);
+			}
+		};
+		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)) {
+			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 = getInstanceOfCrypt().createPassPhrase(login + 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);
+		}
+		confirmRegistration.open(target);
+	}
+
+	@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..1a8b96f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
@@ -0,0 +1,186 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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(IPartialPageRequestHandler 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..74b6c40
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.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.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.core.request.handler.IPartialPageRequestHandler;
+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
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("autoOpen", true);
+		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(IPartialPageRequestHandler 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..fe3481e
--- /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" style="color: blue;"><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..120e298
--- /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 class="paramList">
+			<li><label wicket:for="username"><wicket:message key="install.wizard.params.step1.username"/></label>
+				<input wicket:id="username" wicket:message="title:install.wizard.params.step1.username.title" type="text" />
+			</li>
+			<li><label wicket:for="password"><wicket:message key="install.wizard.params.step1.password"/></label>
+				<input wicket:id="password" wicket:message="title:install.wizard.params.step1.password.title" type="password" />
+			</li>
+			<li><label wicket:for="email"><wicket:message key="install.wizard.params.step1.email"/></label>
+				<input wicket:id="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 class="paramList">
+			<li><label wicket:for="group"><wicket:message key="install.wizard.params.step1.group"/></label>
+				<input wicket:id="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..ea9f953
--- /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 class="paramList">
+			<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="mailReferer"><wicket:message key="install.wizard.params.step2.mailReferer"/></label>
+				<input wicket:id="mailReferer" wicket:message="title:install.wizard.params.step2.mailReferer.title" type="text" />
+			</li>
+			<li><label wicket:for="smtpServer"><wicket:message key="install.wizard.params.step2.smtpServer"/></label>
+				<input wicket:id="smtpServer" wicket:message="title:install.wizard.params.step2.smtpServer.title" type="text" />
+			</li>
+			<li><label wicket:for="smtpPort"><wicket:message key="install.wizard.params.step2.smtpPort"/></label>
+				<input wicket:id="smtpPort" wicket:message="title:install.wizard.params.step2.smtpPort.title" type="text" />
+			</li>
+			<li><label wicket:for="mailAuthName"><wicket:message key="install.wizard.params.step2.mailAuthName"/></label>
+				<input wicket:id="mailAuthName" wicket:message="title:install.wizard.params.step2.mailAuthName.title" type="text" />
+			</li>
+			<li><label wicket:for="mailAuthPass"><wicket:message key="install.wizard.params.step2.mailAuthPass"/></label>
+				<input wicket:id="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="defaultExportFont"><wicket:message key="install.wizard.params.step2.defaultExportFont"/></label>
+				<select wicket:id="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..dc6549d
--- /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 class="paramList">
+			<li><label wicket:for="swfZoom"><wicket:message key="install.wizard.params.step3.swfZoom"/></label>
+				<input wicket:id="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="swfJpegQuality"><wicket:message key="install.wizard.params.step3.swfJpegQuality"/></label>
+				<input wicket:id="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="swfPath"><wicket:message key="install.wizard.params.step3.swfPath"/></label>
+				<input wicket:id="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="imageMagicPath"><wicket:message key="install.wizard.params.step3.imageMagicPath"/></label>
+				<input wicket:id="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="ffmpegPath"><wicket:message key="install.wizard.params.step3.ffmpegPath"/></label>
+				<input wicket:id="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="soxPath"><wicket:message key="install.wizard.params.step3.soxPath"/></label>
+				<input wicket:id="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="jodPath"><wicket:message key="install.wizard.params.step3.jodPath"/></label>
+				<input wicket:id="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="officePath"><wicket:message key="install.wizard.params.step3.officePath"/></label>
+				<input wicket:id="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..ff2c842
--- /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 class="paramList">
+			<li><label wicket:for="cryptClassName"><wicket:message key="install.wizard.params.step4.cryptClassName"/></label>
+				<input wicket:id="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 class="paramList">
+			<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="red5SipRoomPrefix"><wicket:message key="install.wizard.params.step4.red5SipRoomPrefix"/></label>
+				<input wicket:id="red5SipRoomPrefix" type="text" />
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipRoomPrefix.text"/></i>
+				</p>
+			</li>
+			<li><label wicket:for="red5SipExtenContext"><wicket:message key="install.wizard.params.step4.red5SipExtenContext"/></label>
+				<input wicket:id="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.java b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
new file mode 100644
index 0000000..637424e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@ -0,0 +1,771 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+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.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.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.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
+import com.googlecode.wicket.jquery.ui.widget.wizard.AbstractWizard;
+import com.googlecode.wicket.kendo.ui.form.button.IndicatingAjaxButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class InstallWizard extends AbstractWizard<InstallationConfig> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(InstallWizard.class, webAppRootKey);
+	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;
+	
+	public void initTzDropDown() {
+		paramsStep1.tzDropDown.setOption();
+	}
+	
+	//onInit, applyState
+	public InstallWizard(String id, String title) {
+		super(id, title, new CompoundPropertyModel<InstallationConfig>(new InstallationConfig()), true);
+		setTitle(Model.of(getModelObject().appName));
+		welcomeStep = new WelcomeStep();
+		dbStep = new DbStep();
+		paramsStep1 = new ParamsStep1();
+		paramsStep2 = new ParamsStep2();
+		paramsStep3 = new ParamsStep3();
+		paramsStep4 = new ParamsStep4();
+		installStep = new InstallStep();
+
+		DynamicWizardModel wmodel = new DynamicWizardModel(welcomeStep);
+		wmodel.setCancelVisible(false);
+		wmodel.setLastVisible(true);
+		init(wmodel);
+	}
+	
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("closeOnEscape", false);
+		behavior.setOption("dialogClass", Options.asString("no-close"));
+		behavior.setOption("resizable", false);
+	}
+
+	@Override
+	protected WebMarkupContainer newFeedbackPanel(String id) {
+		KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+		feedback.setEscapeModelStrings(false);
+		return feedback;
+	}
+
+	@Override
+	public int getWidth() {
+		return 1000;
+	}
+	
+	@Override
+	protected boolean closeOnFinish() {
+		return false;
+	}
+	
+	private abstract class BaseStep extends DynamicWizardStep {
+		private static final long serialVersionUID = 1L;
+
+		public BaseStep(IDynamicWizardStep prev) {
+			super(prev);
+			setSummaryModel(Model.of(""));
+		}
+		
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			InstallWizard.this.setTitle(Model.of(getModelObject().appName + " - " + getString("install.wizard.install.header")));
+		}
+	}
+	
+	private final class WelcomeStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public WelcomeStep() {
+			super(null);
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(new Label("step", getString("install.wizard.welcome.panel")).setEscapeModelStrings(false));
+		}
+		
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		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 ChoiceRenderer<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(getFeedbackPanel());
+						initForm(true, target);
+					}
+				}));
+        		add(hostelem.add(host), portelem.add(port));
+        		add(dbname, user, pass);
+        		add(new IndicatingAjaxButton("check") {
+					private static final long serialVersionUID = 1L;
+					
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						target.add(getFeedbackPanel());
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						target.add(getFeedbackPanel());
+					}
+        		});
+        	}
+        	
+        	@Override
+        	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).setParameters(getString("install.wizard.db.step.instructions." + props.getDbType().name())).getObject());
+					return;
+				}
+				boolean valid = true;
+				ConnectionPropertiesPatcher.updateUrl(props, host.getModelObject(), "" + port.getModelObject(), dbname.getModelObject());
+				DriverManager.setLoginTimeout(3);
+				try (Connection 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;
+				}
+				if (valid) {
+					form.success(getString("install.wizard.db.step.valid"));
+				}
+        	}
+        	
+        	@Override
+        	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).setParameters(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);
+			add(form.setOutputMarkupId(true));
+			initForm(false, null);
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(new OmLabel("note", "install.wizard.db.step.note", getModelObject().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));
+		}
+		
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		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);
+			add(tzDropDown = new TzDropDown("ical_timeZone"));
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(new RequiredTextField<String>("username").setLabel(Model.of(getString("install.wizard.params.step1.username"))).add(minimumLength(USER_LOGIN_MINIMUM_LENGTH)));
+			add(new PasswordTextField("password").setLabel(Model.of(getString("install.wizard.params.step1.password"))).add(minimumLength(USER_PASSWORD_MINIMUM_LENGTH)));
+			add(new RequiredTextField<String>("email").setLabel(Model.of(getString("install.wizard.params.step1.email"))).add(RfcCompliantEmailAddressValidator.getInstance()));
+			add(new RequiredTextField<String>("group").setLabel(Model.of(getString("install.wizard.params.step1.group"))));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		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>("mailReferer"));
+			add(new TextField<String>("smtpServer"));
+			add(new TextField<Integer>("smtpPort").setRequired(true));
+			add(new TextField<String>("mailAuthName"));
+			add(new PasswordTextField("mailAuthPass").setRequired(false));
+			add(new YesNoDropDown("mailUseTls"));
+			//TODO check mail server
+			add(new YesNoDropDown("replyToOrganizer"));
+			add(new LangDropDown("defaultLangId"));
+			add(new DropDownChoice<String>("defaultExportFont", allFonts));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		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>("swfZoom").setRequired(true).add(range(50, 600)));
+			add(new TextField<Integer>("swfJpegQuality").setRequired(true).add(range(1, 100)));
+			add(new TextField<String>("swfPath"));
+			add(new TextField<String>("imageMagicPath"));
+			add(new TextField<String>("ffmpegPath"));
+			add(new TextField<String>("soxPath"));
+			add(new TextField<String>("jodPath"));
+			add(new TextField<String>("officePath"));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		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>("cryptClassName")); //Validate class
+            
+			//TODO add check for red5sip connection
+			add(new YesNoTextDropDown("red5SipEnable"));
+			add(new TextField<String>("red5SipRoomPrefix"));
+			add(new TextField<String>("red5SipExtenContext"));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		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 final WebMarkupContainer container = new WebMarkupContainer("container");
+		private final AbstractAjaxTimerBehavior timer;
+		private final ProgressBar progressBar;
+		private final Label desc = new Label("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);
+			
+			// 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));
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			desc.setDefaultModelObject(getString("install.wizard.install.desc"));
+			add(desc.setOutputMarkupId(true));
+		}
+		
+		@Override
+		public boolean isLastStep() {
+			return true;
+		}
+
+		@Override
+		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(getModelObject(), 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 = ((CompoundPropertyModel<InstallationConfig>)InstallWizard.this.getModel()).bind(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 ChoiceRenderer<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(InstallWizard.this.getModelObject().defaultLangId)) {
+					option = op;
+				}
+			}
+			setChoices(list);
+		}
+	}
+
+	@Override
+	protected void onFinish(AjaxRequestTarget target) {
+		for (DialogButton b : getButtons()) {
+			b.setEnabled(false, target);
+		}
+		installStep.startInstallation(target);
+	}
+}
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..df874bf
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
@@ -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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript" src="js/openmeetings_functions.js" ></script>
+	<style type="text/css">
+		.abstractWizard .adminForm div.formelement {
+			max-width: 600px;
+		}
+		.abstractWizard .adminForm label {
+			width: 240px;
+		}
+		.abstractWizard ul.paramList {
+			list-style-type: none;
+		}
+		.abstractWizard ul.paramList li {
+			padding-top: 5px;
+		}
+		.abstractWizard ul.paramList label {
+			width: 350px;
+			display: inline-block;
+		}
+		.abstractWizard input, .abstractWizard select {
+			width: 280px;
+		}
+		.abstractWizard input[type=checkbox], .abstractWizard input[type=radio] {
+			width: auto;
+		}
+	</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..bedcc92
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.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.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.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.protocol.http.request.WebClientInfo;
+
+public class InstallWizardPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+	private final InstallWizard wizard;
+
+	public InstallWizardPage() {
+		if (Application.isInstalled()) {
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+		add(wizard = new InstallWizard("wizard", getString("install.wizard.install.header")));
+		// 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();
+				wizard.open(target);
+			}
+		});
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+	}
+}
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/room/InvitationDialog.html b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.html
new file mode 100644
index 0000000..167d82e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.html
@@ -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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table wicket:id="inviteeType">
+			<tr>
+				<td><input type="radio" wicket:id="user"/><label wicket:for="recipients"><wicket:message key="216" /></label></td>
+				<td><input type="hidden" wicket:id="recipients" class="input invitees" style="max-height: 80px"/></td>
+			</tr>
+			<tr>
+				<td><input type="radio" wicket:id="group"/><label wicket:for="groups"><wicket:message key="126" /></label></td>
+				<td><input type="hidden" wicket:id="groups" class="input invitees" style="max-height: 80px"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="subject"><wicket:message key="215" /></label></td>
+				<td><input type="text" wicket:id="subject" class="input"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="message"><wicket:message key="217" /></label></td>
+				<td><textarea wicket:id="message" style="width: 280px; height: 70px;"></textarea></td>
+			</tr>
+			<tr>
+				<td colspan="2"><input wicket:id="passwordProtected" type="checkbox"/>&nbsp;<label 
+						wicket:for="passwordProtected"><wicket:message key="524" /></label></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="password"><wicket:message key="525" /></label></td>
+				<td><input wicket:id="password" type="password"/></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="526" /></td>
+				<td>
+					<div wicket:id="valid">
+						<input type="radio" wicket:id="one"/><label wicket:for="one"><wicket:message key="527" /></label>
+						<input type="radio" wicket:id="period"/><label wicket:for="period"><wicket:message key="528" /></label>
+						<input type="radio" wicket:id="endless"/><label wicket:for="endless"><wicket:message key="529" /></label>
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<td><label wicket:for="validFrom"><wicket:message key="530" /></label></td>
+				<td><span class="date time picker" wicket:id="validFrom"></span></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="validTo"><wicket:message key="531" /></label></td>
+				<td><span class="date time picker" wicket:id="validTo"></span></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="timeZoneId"><wicket:message key="1143" /></label></td>
+				<td><select wicket:id="timeZoneId"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="language"><wicket:message key="59" /></label></td>
+				<td><select wicket:id="language"/></td>
+			</tr>
+			<tr>
+				<td colspan="2"><input wicket:id="url" type="text" readonly="readonly" style="width: 100%;"/></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.java b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.java
new file mode 100644
index 0000000..293a40c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.java
@@ -0,0 +1,409 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.room;
+
+import static org.apache.openmeetings.util.LinkHelper.getInvitationLink;
+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.openmeetings.web.app.WebSession.getUserId;
+
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+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.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+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.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.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.Type;
+import org.apache.openmeetings.util.crypt.MD5;
+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.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+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.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+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.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.CollectionModel;
+import org.apache.wicket.util.string.Strings;
+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.core.Options;
+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.AjaxDateTimePicker;
+import com.googlecode.wicket.kendo.ui.form.datetime.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class InvitationDialog extends AbstractFormDialog<Invitation> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationDialog.class, webAppRootKey);
+	private final DialogButton generate = new DialogButton("generate", Application.getString(1526));
+	private final DialogButton send = new DialogButton("send", Application.getString(218));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final InvitationForm form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private final long roomId;
+	private final IModel<String> subject = Model.of((String)null);
+	private final IModel<String> message = Model.of((String)null);
+	private final IModel<String> tzId = Model.of((String)null);
+	private final IModel<InviteeType> inviteeType = Model.of(InviteeType.user);
+	private Long lang;
+	private final TextField<String> url = new TextField<String>("url", Model.of((String)null));
+	enum InviteeType {
+		user
+		, group
+	}
+	private final UserMultiChoice recipients = new UserMultiChoice("recipients", new CollectionModel<User>(new ArrayList<User>()));
+	private final Select2MultiChoice<Organisation> groups = new Select2MultiChoice<Organisation>("groups"
+			, new CollectionModel<Organisation>(new ArrayList<Organisation>())
+			, new TextChoiceProvider<Organisation>() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void query(String term, int page, Response<Organisation> response) {
+					if (WebSession.getRights().contains(User.Right.Admin)) {
+						List<Organisation> groups = getBean(OrganisationDao.class).get(0, Integer.MAX_VALUE);
+						for (Organisation g : groups) {
+							if (g.getName().toLowerCase().contains(term.toLowerCase())) {
+								response.add(g);
+							}
+						}
+					} else {
+						User u = getBean(UserDao.class).get(getUserId());
+						for (Organisation_Users ou : u.getOrganisation_users()) {
+							if (ou.getOrganisation().getName().toLowerCase().contains(term.toLowerCase())) {
+								response.add(ou.getOrganisation());
+							}
+						}
+					}
+				}
+
+				@Override
+				public Collection<Organisation> toChoices(Collection<String> ids) {
+					Collection<Organisation> c = new ArrayList<>();
+					for (String id : ids) {
+						c.add(getBean(OrganisationDao.class).get(Long.valueOf(id)));
+					}
+					return c;
+				}
+
+				@Override
+				protected String getDisplayText(Organisation choice) {
+					return choice.getName();
+				}
+
+				@Override
+				protected Object getId(Organisation choice) {
+					return choice.getOrganisation_id();
+				}
+			});
+
+	public InvitationDialog(String id, long roomId) {
+		super(id, Application.getString(214), new CompoundPropertyModel<Invitation>(new Invitation()));
+		this.roomId = roomId;
+		add(form = new InvitationForm("form", getModel()));
+	}
+
+	@Override
+	public int getWidth() {
+		return 500;
+	}
+
+	public void updateModel(AjaxRequestTarget target) {
+		Invitation i = new Invitation();
+		User u = getBean(UserDao.class).get(getUserId());
+		i.setInvitedBy(u);
+		Room r = getBean(RoomDao.class).get(roomId);
+		i.setRoom(r);
+		Calendar d = Calendar.getInstance();
+		i.setValidFrom(d.getTime());
+		d.add(Calendar.DATE, 1);
+		i.setValidTo(d.getTime());
+		i.setPassword("ASDDF");
+		String hashRaw = "HASH" + (System.currentTimeMillis());
+		try {
+			i.setHash(MD5.do_checksum(hashRaw));
+		} catch (NoSuchAlgorithmException e) {
+			log.error("Unexpected error while creating invitation", e);
+			throw new RuntimeException(e);
+		}
+		subject.setObject(null);
+		message.setObject(null);
+		recipients.setModelObject(new ArrayList<User>());
+		recipients.setEnabled(true);
+		groups.setModelObject(new ArrayList<Organisation>());
+		groups.setEnabled(false);
+		tzId.setObject(u.getTimeZoneId());
+		lang = u.getLanguage_id();
+		url.setModelObject(null);
+		inviteeType.setObject(InviteeType.user);
+		form.setModelObject(i);
+		send.setEnabled(false, target);
+		generate.setEnabled(false, target);
+		target.add(form);
+	}
+
+	@Override
+	protected Form<?> getForm(DialogButton button) {
+		if (button.equals(generate) || button.equals(send)) {
+			return form;
+		}
+		return super.getForm(button);
+	}
+	
+	@Override
+	public InvitationForm getForm() {
+		return form;
+	}
+
+	@Override
+	protected DialogButton getSubmitButton() {
+		return send;
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(generate, send, cancel);
+	}
+	
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	public void onClick(AjaxRequestTarget target, DialogButton button) {
+		//TODO need to be reviewed
+		if (button.equals(cancel)) {
+			super.onClick(target, button);
+		} else if (button.equals(generate)) {
+			Invitation i = create(recipients.getModelObject().iterator().next());
+			form.setModelObject(i);
+			url.setModelObject(getInvitationLink(getBean(ConfigurationDao.class).getBaseUrl(), i));
+			target.add(url);
+		} else if (button.equals(send)) {
+			if (Strings.isEmpty(url.getModelObject())) {
+				if (inviteeType.getObject() == InviteeType.user) {
+					for (User u : recipients.getModelObject()) {
+						Invitation i = create(u);
+						try {
+							getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false);
+						} catch (Exception e) {
+							log.error("error while sending invitation by User ", e);
+						}
+					}
+				} else {
+					for (Organisation g : groups.getModelObject()) {
+						for (Organisation_Users ou : getBean(OrganisationUserDao.class).get(g.getOrganisation_id(), 0, Integer.MAX_VALUE)) {
+							Invitation i = create(ou.getUser());
+							try {
+								getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false);
+							} catch (Exception e) {
+								log.error("error while sending invitation by Group ", e);
+							}
+						}
+					}
+				}
+			} else {
+				Invitation i = form.getModelObject();
+				try {
+					getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false);
+				} catch (Exception e) {
+					log.error("error while sending invitation by URL ", e);
+				}
+			}
+			super.onClick(target, button);
+		}
+	}
+	
+	private Invitation create(User u) {
+		Invitation i = new Invitation(form.getModelObject());
+		i.setId(null);
+		i.setUpdated(null);
+		i.setUsed(false);
+		
+		i.setPassword(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(i.getPassword())); //FIXME should be hidden
+		//FIXME another HACK
+		Calendar d = Calendar.getInstance();
+		d.setTime(i.getValidFrom());
+		d.add(Calendar.MINUTE, -5);
+		i.setValidFrom(d.getTime());
+		
+		i.setInvitee(u);
+		if (Type.contact == u.getType()) {
+			//TODO not sure it is right
+			u.setLanguage_id(lang);
+		}
+		return getBean(InvitationDao.class).update(i);
+	}
+	
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		//designed to be empty because of multiple submit buttons
+	}
+	
+	private class InvitationForm extends Form<Invitation> {
+		private static final long serialVersionUID = 1L;
+		private final PasswordTextField passwd;
+		private final DateTimePicker from;
+		private final DateTimePicker to;
+		private final DropDownChoice<String> timeZoneId;
+		
+		public InvitationForm(String id, IModel<Invitation> model) {
+			super(id, model);
+			RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", inviteeType);
+			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					boolean groupsEnabled = InviteeType.group == inviteeType.getObject();
+					updateButtons(target);
+					target.add(groups.setEnabled(groupsEnabled), recipients.setEnabled(!groupsEnabled));
+				}
+			}));
+			//TODO list should be updated on open
+			rdi.add(recipients.setLabel(Model.of(Application.getString(216))).setRequired(true).add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					url.setModelObject(null);
+					updateButtons(target);
+				}
+			}).setOutputMarkupId(true));
+			rdi.add(groups.setLabel(Model.of(Application.getString(126))).setRequired(true).add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					url.setModelObject(null);
+					updateButtons(target);
+				}
+			}).setOutputMarkupId(true));
+			rdi.add(new Radio<InviteeType>("user", Model.of(InviteeType.user)), new Radio<InviteeType>("group", Model.of(InviteeType.group)));
+
+			rdi.add(new TextField<String>("subject", subject));
+			rdi.add(new TextArea<String>("message", message));
+			rdi.add(new AjaxCheckBox("passwordProtected") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					InvitationForm.this.getModelObject().setPasswordProtected(getConvertedInput());
+					passwd.setEnabled(getConvertedInput());
+					target.add(passwd);
+				}
+			});
+			RadioGroup<Valid> valid = new RadioGroup<Valid>("valid");
+			valid.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					boolean dateEnabled = InvitationForm.this.getModelObject().getValid() == Valid.Period;
+					target.add(from.setEnabled(dateEnabled), to.setEnabled(dateEnabled), timeZoneId.setEnabled(dateEnabled));
+				}
+			});
+			rdi.add(valid.add(new Radio<Valid>("one", Model.of(Valid.OneTime))
+					, new Radio<Valid>("period", Model.of(Valid.Period))
+					, new Radio<Valid>("endless", Model.of(Valid.Endless))));
+			rdi.add(passwd = new PasswordTextField("password"));
+			Invitation i = getModelObject();
+			passwd.setLabel(Model.of(Application.getString(525))).setOutputMarkupId(true).setEnabled(i.isPasswordProtected());
+			rdi.add(from = new AjaxDateTimePicker("validFrom", "yyyy/MM/dd", "HH:mm:ss")); //FIXME use user locale
+			rdi.add(to = new AjaxDateTimePicker("validTo", "yyyy/MM/dd", "HH:mm:ss")); //FIXME use user locale
+			rdi.add(timeZoneId = new DropDownChoice<String>("timeZoneId", tzId, AVAILABLE_TIMEZONES));
+			from.setEnabled(i.getValid() == Valid.Period).setOutputMarkupId(true);
+			to.setEnabled(i.getValid() == Valid.Period).setOutputMarkupId(true);
+			timeZoneId.setEnabled(i.getValid() == Valid.Period).setOutputMarkupId(true)
+				.add(new AjaxFormComponentUpdatingBehavior("change") {
+					private static final long serialVersionUID = 1L;
+	
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						//no-op added to preserve selection
+					}
+				});
+			rdi.add(new LanguageDropDown("language", new PropertyModel<Long>(InvitationDialog.this, "lang")));
+			rdi.add(url.setOutputMarkupId(true));
+			add(feedback);
+		}
+		
+		private void updateButtons(AjaxRequestTarget target) {
+			if (inviteeType.getObject() == InviteeType.user) {
+				Collection<User> to = recipients.getModelObject();
+				send.setEnabled(to.size() > 0, target);
+				generate.setEnabled(to.size() == 1, target);
+			} else {
+				Collection<Organisation> to = groups.getModelObject();
+				send.setEnabled(to.size() > 0, target);
+				generate.setEnabled(false, target);
+			}
+		}
+		
+		@Override
+		protected void onValidate() {
+			if (from.getConvertedInput() != null && to.getConvertedInput() != null && from.getConvertedInput().after(to.getConvertedInput())) {
+				error(Application.getString(1592));
+			}
+		}
+	}
+	
+	@Override
+	protected void onDetach() {
+		subject.detach();
+		message.detach();
+		tzId.detach();
+		inviteeType.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/RoomBroadcaster.java b/src/web/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
new file mode 100644
index 0000000..da20e69
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/RoomBroadcaster.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.room;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.session.SessionManager;
+import org.red5.server.api.IConnection;
+
+public class RoomBroadcaster {
+	public static Client getClient(String publicSid) {
+		ClientSessionInfo csi = getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid, false);
+		return csi == null ? null : csi.getRcl();
+	}
+	
+	public static void broadcast(String publicSid, String method, Object obj) {
+		Client rc = getClient(publicSid);
+		final Long roomId = rc.getRoom_id();
+		final SessionManager sessionMgr = getBean(SessionManager.class);
+		final UserDao userDao = getBean(UserDao.class);
+		ScopeApplicationAdapter sa = getBean(ScopeApplicationAdapter.class);
+		sa.new MessageSender(sa.getRoomScope("" + roomId), method, obj) {
+			public boolean filter(IConnection conn) {
+				Client rcl = sessionMgr.getClientByStreamId(conn.getClient().getId(), null);
+				return rcl.getIsScreenClient()
+						|| rcl.getRoom_id() == null || !rcl.getRoom_id().equals(roomId) || userDao.get(rcl.getUser_id()) == null;
+			}
+		}.start();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/RoomPanel.html b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.html
new file mode 100644
index 0000000..c0ed04f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.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 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>
+	<div wicket:id="invite"></div>
+	<div wicket:id="createPoll"></div>
+	<div wicket:id="vote"></div>
+	<div wicket:id="pollResults"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/room/RoomPanel.java b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.java
new file mode 100644
index 0000000..47ad12a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -0,0 +1,250 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.room;
+
+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 static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.RoomBroadcaster.getClient;
+import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.entity.room.Client;
+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.openmeetings.web.room.poll.CreatePollDialog;
+import org.apache.openmeetings.web.room.poll.PollResultsDialog;
+import org.apache.openmeetings.web.room.poll.VoteDialog;
+import org.apache.wicket.Component;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+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 String WICKET_ROOM_ID = "wicketroomid";
+	private static final String PARAM_PUBLIC_SID = "publicSid";
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
+	private final InvitationDialog invite;
+	private final CreatePollDialog createPoll;
+	private final VoteDialog vote;
+	private final PollResultsDialog pollResults;
+	private long roomId = 0;
+	
+	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(WICKET_ROOM_ID, 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
+			}
+		});
+		//OK let's find the room
+		try {
+			StringValue room = pp.get(WICKET_ROOM_ID);
+			StringValue secureHash = pp.get(WebSession.SECURE_HASH);
+			StringValue invitationHash = pp.get(WebSession.INVITATION_HASH);
+			if (!room.isEmpty()) {
+				roomId = room.toLong();
+			} else if (!secureHash.isEmpty()) {
+				roomId = getBean(SOAPLoginDao.class).get(secureHash.toString()).getRoom_id();
+			} else if (!invitationHash.isEmpty()) {
+				roomId = getBean(InvitationDao.class).getInvitationByHashCode(invitationHash.toString(), true).getRoom().getRooms_id();
+			}
+		} catch (Exception e) {
+			//no-op
+		}
+		add(invite = new InvitationDialog("invite", roomId));
+		add(createPoll = new CreatePollDialog("createPoll", roomId));
+		add(vote = new VoteDialog("vote", roomId));
+		add(pollResults = new PollResultsDialog("pollResults", roomId));
+		if (roomId > 0) {
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					invite.updateModel(target);
+					invite.open(target);
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("openInvitation", this), "openInvitation")));
+				}
+			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					String publicSid = getPublicSid();
+					Client c = getClient(publicSid);
+					if (c != null && c.getIsMod()) {
+						createPoll.updateModel(target, publicSid);
+						createPoll.open(target);
+					}
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("createPoll", this, explicit(PARAM_PUBLIC_SID)), "createPoll")));
+				}
+			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					Client c = getClient(getPublicSid());
+					if (c != null) {
+						pollResults.updateModel(target, c.getIsMod());
+						pollResults.open(target);
+					}
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("pollResults", this, explicit(PARAM_PUBLIC_SID)), "pollResults")));
+				}
+			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					if (getBean(PollDao.class).hasPoll(roomId) && !getBean(PollDao.class).hasVoted(roomId, getUserId()) && getClient(getPublicSid()) != null) {
+						vote.updateModel(target);
+						vote.open(target);
+					}
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("vote", this, explicit(PARAM_PUBLIC_SID)), "vote")));
+				}
+			});
+		}
+	}
+
+	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")));
+	}
+	
+	private String getPublicSid() {
+		return getRequest().getRequestParameters().getParameterValue(PARAM_PUBLIC_SID).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
new file mode 100644
index 0000000..0268e7c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
@@ -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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<th colspan="2"><wicket:message key="19" /></th>
+			</tr>
+			<tr>
+				<td><label wicket:for="pollName"><wicket:message key="1410" /></label></td>
+				<td><input type="text" wicket:id="pollName" class="input"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="pollQuestion"><wicket:message key="20" /></label></td>
+				<td><textarea wicket:id="pollQuestion" style="width: 280px; height: 70px;"></textarea></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="pollType"><wicket:message key="21" /></label></td>
+				<td><select wicket:id="pollType"/></td>
+			</tr>
+			<tr>
+				<td colspan="2" style="color: red;"><wicket:message key="23" /></td>
+			</tr>
+		</table>
+		<div wicket:id="feedback"></div>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
new file mode 100644
index 0000000..ff1b4ee
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.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.web.room.poll;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.RoomBroadcaster.broadcast;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+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.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.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+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.kendo.ui.panel.KendoFeedbackPanel;
+
+public class CreatePollDialog extends AbstractFormDialog<RoomPoll> {
+	private static final long serialVersionUID = 1L;
+	private final DialogButton create = new DialogButton("create", Application.getString(22));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(25));
+	private final long roomId;
+	private final PollForm form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private String publicSid = null;
+
+	public CreatePollDialog(String id, long roomId) {
+		super(id, Application.getString(18), new CompoundPropertyModel<RoomPoll>(new RoomPoll()));
+		this.roomId = roomId;
+		add(form = new PollForm("form", getModel()));
+	}
+
+	public void updateModel(AjaxRequestTarget target, String publicSid) {
+		this.publicSid = publicSid;
+		RoomPoll p = new RoomPoll();
+		User u = getBean(UserDao.class).get(getUserId());
+		p.setCreatedBy(u);
+		p.setRoom(getBean(RoomDao.class).get(roomId));
+		p.setPollType(getBean(PollDao.class).getPollTypes().get(0));
+		form.setModelObject(p);
+		target.add(form);
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(create, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return create;
+	}
+
+	@Override
+	public PollForm getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		getBean(PollDao.class).closePoll(roomId);
+		RoomPoll p = getBean(PollDao.class).updatePoll(form.getModelObject());
+		broadcast(publicSid, "newPoll", p);
+	}
+
+	private class PollForm extends Form<RoomPoll> {
+		private static final long serialVersionUID = 1L;
+		
+		public PollForm(String id, IModel<RoomPoll> model) {
+			super(id, model);
+			add(new RequiredTextField<String>("pollName").setLabel(Model.of(Application.getString(1410))));
+			add(new TextArea<String>("pollQuestion"));
+			add(new DropDownChoice<PollType>("pollType", getBean(PollDao.class).getPollTypes()
+					, new ChoiceRenderer<PollType>() {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public Object getDisplayValue(PollType pt) {
+							return getString("" + pt.getLabel());
+						}
+
+						@Override
+						public String getIdValue(PollType pt, int index) {
+							return "" + pt.getPollTypesId();
+						}
+					})
+					.setRequired(true).setLabel(Model.of(Application.getString(21))));
+			add(feedback);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
new file mode 100644
index 0000000..9fcd956
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.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:panel>
+	<form wicket:id="selForm">
+		<table style="width: 100%">
+			<tr>
+				<td><wicket:message key="1412"/></td>
+				<td><select style="width: 230px" wicket:id="polls"></select></td>
+			</tr>
+		</table>
+	</form>
+	<form wicket:id="dispForm">
+		<table style="width: 100%">
+			<tr>
+				<td colspan="2"><span wicket:id="name"></span>&nbsp;<wicket:message key="36"/></td>
+			</tr>
+			<tr>
+				<td colspan="2"><span wicket:id="question"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="39"/>&nbsp;(<span wicket:id="count"></span>)</td>
+				<td><select style="width: 280px" wicket:id="chartType"></select></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="40"/></td>
+				<td><div wicket:id="chart"></div></td>
+			</tr>
+		</table>
+	</form>
+	<div wicket:id="closeConfirm"></div>
+	<div wicket:id="deleteConfirm"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
new file mode 100644
index 0000000..72fde30
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.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.web.room.poll;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+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.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.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.wicketstuff.jqplot.behavior.JqPlotBehavior;
+import org.wicketstuff.jqplot.behavior.JqPlotCssResourceReference;
+import org.wicketstuff.jqplot.behavior.JqPlotJavascriptResourceReference;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+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 br.com.digilabs.jqplot.Chart;
+import br.com.digilabs.jqplot.ChartConfiguration;
+import br.com.digilabs.jqplot.JqPlotResources;
+import br.com.digilabs.jqplot.JqPlotUtils;
+import br.com.digilabs.jqplot.chart.BarChart;
+import br.com.digilabs.jqplot.chart.PieChart;
+import br.com.digilabs.jqplot.elements.Highlighter;
+import br.com.digilabs.jqplot.elements.Location;
+import br.com.digilabs.jqplot.elements.RendererOptions;
+
+/**
+ * @author solomax
+ *
+ */
+public class PollResultsDialog extends AbstractDialog<RoomPoll> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer chartDiv = new WebMarkupContainer("chart");
+	private final long roomId;
+	private final PollSelectForm selForm;
+	private final PollResultsForm dispForm;
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(25));
+	private final DialogButton close = new DialogButton("close", Application.getString(1418));
+	private final DialogButton delete = new DialogButton("delete", Application.getString(1420));
+	private boolean moderator = false;
+	private final MessageDialog closeConfirm;
+	private final MessageDialog deleteConfirm;
+
+	public PollResultsDialog(String id, long _roomId) {
+		super(id, Application.getString(37));
+		this.roomId = _roomId;
+		add(selForm = new PollSelectForm("selForm"));
+		add(dispForm = new PollResultsForm("dispForm"));
+		add(closeConfirm = new MessageDialog("closeConfirm", Application.getString(1418), Application.getString(1419), DialogButtons.YES_NO, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				// TODO should rights be additionally checked here????
+				if(button != null && button.match(YES)) {
+					Long id = dispForm.getModelObject().getRoomPollId();
+					getBean(PollDao.class).closePoll(roomId);
+					selForm.updateModel(handler);
+
+					RoomPoll p = getBean(PollDao.class).getPoll(id);
+					selForm.select.setModelObject(p);
+					dispForm.updateModel(p, false, handler);
+					//TODO result dialogs of other users should also be updated
+				}
+			}
+		});
+		add(deleteConfirm = new MessageDialog("deleteConfirm", Application.getString(1420), Application.getString(1421), DialogButtons.YES_NO, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				// TODO should rights be additionally checked here????
+				if(button != null && button.match(YES)) {
+					getBean(PollDao.class).deletePoll(dispForm.getModelObject().getRoomPollId());
+					selForm.updateModel(handler);
+					dispForm.updateModel(selForm.select.getModelObject(), true, handler);
+					//TODO result dialogs of other users should also be updated
+				}
+			}
+		});
+	}
+
+	@Override
+	public int getWidth() {
+		return 500;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(delete, close, cancel);
+	}
+	
+	public void updateModel(AjaxRequestTarget target, boolean moderator) {
+		selForm.updateModel(target);
+		this.moderator = moderator;
+		RoomPoll p = selForm.select.getModelObject();
+		dispForm.updateModel(p, false, target);
+		StringBuilder builder = new StringBuilder();
+		builder.append("$('#").append(PollResultsDialog.this.getMarkupId()).append("').on('dialogopen', function( event, ui ) {");
+		builder.append(getScript(barChart(p)));
+		builder.append("});");
+		
+		target.appendJavaScript(builder.toString());
+	}
+
+	private StringBuilder getScript(Chart<?> chart) {
+		StringBuilder builder = new StringBuilder();
+		builder.append("$('#").append(chartDiv.getMarkupId()).append("').html(''); ");
+		builder.append("$.jqplot('").append(chartDiv.getMarkupId()).append("', ");
+		builder.append(chart.getChartData().toJsonString());
+		builder.append(", ");
+		builder.append(JqPlotUtils.jqPlotToJson(chart.getChartConfiguration()));
+		builder.append(");");
+		return builder;
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(JavaScriptHeaderItem.forReference(JqPlotJavascriptResourceReference.get()));
+		response.render(CssHeaderItem.forReference(JqPlotCssResourceReference.get()));
+		Chart<?> c1 = new PieChart<Number>(null);
+		c1.getChartConfiguration().setHighlighter(new Highlighter());
+		for (Chart<?> chart : new Chart<?>[]{c1, new BarChart<Integer>(null)}) {
+			for (String resource : JqPlotUtils.retriveJavaScriptResources(chart)) {
+				response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(JqPlotBehavior.class, removeMinified(resource))));
+			}
+		}
+	}
+	
+    private String removeMinified(String name_) {
+        String name = name_;
+        int idxOfExtension = name.lastIndexOf('.');
+        if (idxOfExtension > -1) {
+            String extension = name.substring(idxOfExtension);
+            name = name.substring(0, name.length() - extension.length() + 1);
+            if (name.endsWith(".min."))
+            {
+                name = name.substring(0, name.length() - 5) + extension;
+            }
+        }
+        return name;
+    }
+
+    @Override
+    public void onClick(AjaxRequestTarget target, DialogButton button) {
+    	if (close.equals(button)) {
+    		closeConfirm.open(target);
+    	} else if (delete.equals(button)) {
+    		deleteConfirm.open(target);
+    	} else {
+    		super.onClick(target, button);
+    	}
+    }
+    
+    @Override
+    public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+    }
+    
+    private String[] getTicks(RoomPoll p) {
+		return p != null && p.getPollType().getIsNumericAnswer()
+				? new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}
+				: new String[] {Application.getString(34), Application.getString(35)};
+    }
+    
+	private Integer[] initValues(int size) {
+		Integer[] values = new Integer[size];
+		for (int i = 0; i < size; ++i) {
+			values[i] = 0;
+		}
+		return values;
+	}
+	
+	private Integer[] getValues(RoomPoll p) {
+		Integer[] values = initValues(p != null && p.getPollType().getIsNumericAnswer() ? 10 : 2);
+		if (p != null && p.getPollType().getIsNumericAnswer()) {
+			for (RoomPollAnswers a : p.getRoomPollAnswerList()) {
+				values[a.getPointList() - 1] ++;
+			}
+		} else if (p != null) {
+			for (RoomPollAnswers a : p.getRoomPollAnswerList()) {
+				values[a.getAnswer() ? 0 : 1] ++;
+			}
+		}
+		return values;
+	}
+	
+	private PieChart<Integer> pieChart(RoomPoll p) {
+        PieChart<Integer> pieChart = new PieChart<Integer>(null);
+		String[] ticks = getTicks(p);
+		Integer[] values = getValues(p);
+        for (int i = 0; i < values.length; ++i) {
+            pieChart.addValue(ticks[i], values[i]);
+        }
+        
+        pieChart.getSeriesDefaults().setRendererOptions(
+        		new RendererOptions().setHighlightMouseDown(true).setShowDataLabels(true)
+        			.setFill(false).setSliceMargin(4).setLineWidth(5));
+
+        Highlighter h = new Highlighter();
+        h.setShow(true);
+        h.setFormatString("%s, %P");
+        h.setTooltipLocation(Location.ne);
+        h.setShowTooltip(true);
+        h.setUseAxesFormatters(false);
+        
+        pieChart.getChartConfiguration().setLegend(null).setHighlighter(h);
+        return pieChart;
+	}
+	
+	private BarChart<Integer> barChart(RoomPoll p) {
+		String[] ticks = getTicks(p);
+		BarChart<Integer> barChart = new BarChart<Integer>(null);
+		barChart.addValue(Arrays.asList(getValues(p)));
+        
+        barChart.getSeriesDefaults().setRendererOptions(
+        		new RendererOptions().setHighlightMouseDown(true).setShowDataLabels(true)
+        			.setFill(false).setSliceMargin(4).setLineWidth(5).setBarDirection("horizontal"));
+
+        Highlighter h = new Highlighter();
+        h.setShow(true);
+        h.setFormatString("%s, %P");
+        h.setTooltipLocation(Location.ne);
+        h.setShowTooltip(true);
+        h.setUseAxesFormatters(false);
+        
+        ChartConfiguration<Long> cfg = barChart.getChartConfiguration();
+        cfg.setLegend(null).setHighlighter(h);
+        cfg.axesInstance().setXaxis(null);
+        /*cfg.axesInstance().xAxisInstance().setRenderer(JqPlotResources.AxisTickRenderer);*/
+        cfg.axesInstance()
+        	.yAxisInstance()
+        	.setTicks(ticks)
+        	.setRenderer(JqPlotResources.CategoryAxisRenderer);
+        return barChart;
+	}
+	
+	private class PollSelectForm extends Form<RoomPoll> {
+		private static final long serialVersionUID = 1L;
+		private final DropDownChoice<RoomPoll> select;
+
+		PollSelectForm(String id) {
+			super(id);
+			add((select = new DropDownChoice<RoomPoll>("polls", Model.of((RoomPoll)null), new ArrayList<RoomPoll>(), new ChoiceRenderer<RoomPoll>() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public Object getDisplayValue(RoomPoll object) {
+					return object == null ? "" : String.format("%s%s", object.getPollName(), object.isArchived() ? "" : String.format(" (%s)", Application.getString(1413)));
+				}
+
+				@Override
+				public String getIdValue(RoomPoll object, int index) {
+					return object == null ? "" : "" + object.getRoomPollId();
+				}
+			})).add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					dispForm.updateModel(select.getModelObject(), true, target);
+				}
+			}));
+			updateModel(null);
+		}
+
+		public void updateModel(IPartialPageRequestHandler handler) {
+			List<RoomPoll> list = new ArrayList<RoomPoll>();
+			RoomPoll p = getBean(PollDao.class).getPoll(roomId);
+			if (p != null) {
+				list.add(p);
+			}
+			list.addAll(getBean(PollDao.class).getArchivedPollList(roomId));
+			select.setChoices(list);
+			select.setModelObject(list.isEmpty() ? null : list.get(0));
+			if (handler != null) {
+				handler.add(this);
+			}
+		}
+	}
+	
+	private class PollResultsForm extends Form<RoomPoll> {
+		private static final long serialVersionUID = 1L;
+		private final String SIMPLE_CHART = Application.getString(1414);
+		private final String PIE_CHART = Application.getString(1415);
+		private final IModel<String> name = Model.of((String)null);
+		private final IModel<Integer> count = Model.of(0);
+		private final DropDownChoice<String> chartType = new DropDownChoice<String>("chartType", Model.of(SIMPLE_CHART), Arrays.asList(SIMPLE_CHART, PIE_CHART));
+
+		PollResultsForm(String id) {
+			super(id, Model.of((RoomPoll)null));
+			setOutputMarkupId(true);
+			add(new Label("name", name));
+			add(new Label("question"));
+			add(new Label("count", count));
+			add(chartType.add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					redraw(target);
+				}
+			}));
+			add(chartDiv.setOutputMarkupId(true));
+		}
+		
+		public void updateModel(RoomPoll poll, boolean redraw, IPartialPageRequestHandler handler) {
+			setModelObject(poll);
+			name.setObject(poll == null ? "" : VoteDialog.getName(poll.getCreatedBy()));
+			count.setObject(poll == null ? 0 : poll.getRoomPollAnswerList().size());
+			handler.add(this);
+			close.setVisible(moderator && (poll != null && !poll.isArchived()), handler);
+			delete.setVisible(moderator, handler);
+			if (redraw) {
+				redraw(handler);
+			}
+		}
+		
+		private void redraw(IPartialPageRequestHandler handler) {
+			RoomPoll poll = getModelObject();
+			Chart<?> chart = SIMPLE_CHART.equals(chartType.getModelObject()) ? barChart(poll) : pieChart(poll);
+			handler.appendJavaScript(getScript(chart));
+		}
+		
+		@Override
+		protected void onDetach() {
+			name.detach();
+			count.detach();
+			super.onDetach();
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.html b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
new file mode 100644
index 0000000..2af85a7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.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>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<td colspan="2"><span wicket:id="user"></span>&nbsp;<wicket:message key="36" /></td>
+			</tr>
+			<tr>
+				<td colspan="2"><span wicket:id="roomPoll.pollQuestion"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="33" /></td>
+				<td style="height: 50px;">
+					<div wicket:id="typeBool">
+						<div wicket:id="answer">
+							<input type="radio" wicket:id="true"/><label wicket:for="true"><wicket:message key="34" /></label><br/>
+							<input type="radio" wicket:id="false"/><label wicket:for="false"><wicket:message key="35" /></label>
+						</div>
+					</div>
+					<div wicket:id="typeInt">
+						<select wicket:id="pointList"></select>
+					</div>
+				</td>
+			</tr>
+		</table>
+		<div wicket:id="feedback"></div>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.java b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
new file mode 100644
index 0000000..29d464b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.room.poll;
+
+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.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+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.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+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.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+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.kendo.ui.panel.KendoFeedbackPanel;
+
+/**
+ * @author solomax
+ *
+ */
+public class VoteDialog extends AbstractFormDialog<RoomPollAnswers> {
+	private static final long serialVersionUID = 1L;
+	private final static List<Integer> answers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);  //TODO max vote should be added 
+	private final long roomId;
+	private final PollAnswerForm form;
+	private final DialogButton vote = new DialogButton("vote", Application.getString(32));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(25));
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private final IModel<String> user = Model.of((String)null);
+
+	public VoteDialog(String id, long roomId) {
+		super(id, Application.getString(18));
+		this.roomId = roomId;
+		add(form = new PollAnswerForm("form", new CompoundPropertyModel<RoomPollAnswers>(new RoomPollAnswers())));
+	}
+	
+	static String getName(User u) {
+		return u == null ? "" : getUserId() == u.getUser_id() ? Application.getString(1411) : u.getFirstname() + " " + u.getLastname();
+	}
+	
+	public void updateModel(AjaxRequestTarget target) {
+		RoomPollAnswers a = new RoomPollAnswers();
+		a.setRoomPoll(getBean(PollDao.class).getPoll(roomId));
+		User u = getBean(UserDao.class).get(getUserId());
+		a.setVotedUser(u);
+		user.setObject(getName(a.getRoomPoll().getCreatedBy()));
+		form.setModelObject(a);
+		boolean typeNum = a.getRoomPoll() != null && a.getRoomPoll().getPollType() != null && a.getRoomPoll().getPollType().getIsNumericAnswer();
+		form.typeBool.setVisible(!typeNum);
+		form.typeInt.setVisible(typeNum);
+		target.add(form);
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(vote, cancel);
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#getSubmitButton()
+	 */
+	@Override
+	protected DialogButton getSubmitButton() {
+		return vote;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#getForm()
+	 */
+	@Override
+	public PollAnswerForm getForm() {
+		return form;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#onError(org.apache.wicket.ajax.AjaxRequestTarget)
+	 */
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#onSubmit(org.apache.wicket.ajax.AjaxRequestTarget)
+	 */
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		RoomPollAnswers a = form.getModelObject();
+		a.setVoteDate(new Date());
+		a.getRoomPoll().getRoomPollAnswerList().add(a);
+		getBean(PollDao.class).updatePoll(a.getRoomPoll());
+	}
+	
+	@Override
+	protected void onDetach() {
+		user.detach();
+		super.onDetach();
+	}
+	private class PollAnswerForm extends Form<RoomPollAnswers> {
+		private static final long serialVersionUID = 1L;
+		private final WebMarkupContainer typeBool = new WebMarkupContainer("typeBool");
+		private final WebMarkupContainer typeInt = new WebMarkupContainer("typeInt");
+
+		PollAnswerForm(String id, IModel<RoomPollAnswers> model) {
+			super(id, model);
+			add(feedback);
+			add(new Label("user", user));
+			add(new Label("roomPoll.pollQuestion"));
+			add(typeBool.add(new RadioGroup<Boolean>("answer").setRequired(true)
+						.add(new Radio<Boolean>("true", Model.of(Boolean.TRUE))).add(new Radio<Boolean>("false", Model.of(Boolean.FALSE)))
+				).setOutputMarkupPlaceholderTag(true).setVisible(false));
+			add(typeInt.add(new DropDownChoice<Integer>("pointList", answers).setRequired(true))
+					.setOutputMarkupPlaceholderTag(true).setVisible(false));
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/swf-functions.js b/src/web/java/org/apache/openmeetings/web/room/swf-functions.js
new file mode 100644
index 0000000..476d90b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/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', 'opaque').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/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..805d3aa
--- /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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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..590b456
--- /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.WebSocketSettings;
+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 = WebSocketSettings.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..b252f64
--- /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.core.request.handler.IPartialPageRequestHandler;
+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.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(IPartialPageRequestHandler target, DialogButton button) {
+				if (button != null && button.match(AbstractDialog.OK)){
+					deleteAppointment(target);
+				}
+			}
+		};
+		add(confirmDelete);
+	}
+
+	protected void deleteAppointment(IPartialPageRequestHandler 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(IPartialPageRequestHandler target) {
+		target.add(this.form);
+	}
+	
+	@Override
+	public void onClose(IPartialPageRequestHandler 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 ChoiceRenderer<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..26943b4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler target) {
+	}
+
+	@Override
+	public void cleanup(IPartialPageRequestHandler target) {
+		refreshTimer.stop(target);
+	}
+	
+	private AppointmentDao getDao() {
+		return getBean(AppointmentDao.class);
+	}
+	
+	private AppointmentReminderTypDao getAppointmentReminderTypDao() {
+		return getBean(AppointmentReminderTypDao.class);
+	}
+	
+	public void refresh(IPartialPageRequestHandler 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..5885455
--- /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 com.googlecode.wicket.jquery.ui.form.button.Button;
+
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.web.WidgetView;
+
+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("click") {
+			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("click");
+		}
+		
+		@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..af67fe2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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(IPartialPageRequestHandler 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..96da610
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
@@ -0,0 +1,648 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.core.request.handler.IPartialPageRequestHandler;
+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.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+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 org.apache.wicket.model.util.ListModel;
+
+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<PrivateMessageFolder>> foldersModel = new ListModel<PrivateMessageFolder>(null);
+	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 ChoiceRenderer<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 ChoiceRenderer<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.setObject(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(IPartialPageRequestHandler 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.isPending()) {
+					item.add(AttributeModifier.append("class", "unread"));
+				}
+				item.add(new Label("name", getName(uc)));	
+				item.add(new WebMarkupContainer("accept").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						ContactsHelper.acceptUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(uc.isPending()));
+				item.add(new WebMarkupContainer("decline").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						getBean(UserContactsDao.class).deleteUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(uc.isPending()));
+				item.add(new WebMarkupContainer("view").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						d.open(target, userId);
+					}
+				}));
+				item.add(new WebMarkupContainer("message").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						newMessage.reset(true).open(target, userId);
+					}
+				}).setVisible(!uc.isPending()));
+				item.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						getBean(UserContactsDao.class).deleteUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(!uc.isPending()));
+			}
+		};
+		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..702cefa
--- /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
+		add(new AjaxFormValidatingBehavior("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..2eb0257
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.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.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.core.request.handler.IPartialPageRequestHandler;
+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;
+		contacts.setVisible(userId != getUserId() && getBean(UserContactsDao.class).get(userId, getUserId()) == null, target);
+		message.setVisible(userId != getUserId(), target);
+		container.replace(new UserProfilePanel("body", userId));
+		target.add(container);
+		open(target);
+	}
+	
+	public WebMarkupContainer getContainer() {
+		return container;
+	}
+	
+	@Override
+	public int getWidth() {
+		return 600;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(contacts, message, cancel);
+	}
+	
+	public void onClose(IPartialPageRequestHandler 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..5850bf9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.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.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() || model.getObject().getShowContactData()
+				|| (model.getObject().getShowContactDataToContacts() && getBean(UserContactsDao.class).isContact(model.getObject().getUser_id(), getUserId())))
+		{
+			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..0da698d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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, "submit") {
+					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(IPartialPageRequestHandler 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("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						d.open(target, userId);
+					}
+				}));
+				item.add(new WebMarkupContainer("add").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						ContactsHelper.addUserToContactList(userId);
+						refresh(target);
+					}
+				}).setVisible(userId != getUserId() && !contactsDao.isContact(userId, getUserId())));
+				item.add(new WebMarkupContainer("message").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						newMessage.reset(true).open(target, userId);
+					}
+				})).setVisible(userId != getUserId());
+				//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..b10c50b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.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.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.core.request.handler.IPartialPageRequestHandler;
+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(IPartialPageRequestHandler 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);
+	}
+	
+	@Override
+	public void onClose(IPartialPageRequestHandler 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..7b477e0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
@@ -0,0 +1,362 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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.ConfirmableAjaxBorder;
+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.html.form.Form;
+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("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				addFolder.open(target);
+			}
+		}));
+		trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(trees); //FIXME add correct refresh
+			}
+		}));
+		trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				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..358a5d4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.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>
+	<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><span wicket:id="downloadBtn"></span></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..6585bc0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.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.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.ArrayList;
+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;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxSplitButton;
+import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
+import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
+
+public class VideoInfo extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final Form<Void> form = new Form<Void>("form");
+	private final AjaxSplitButton downloadBtn = new AjaxSplitButton("downloadBtn", new ArrayList<IMenuItem>());
+	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),
+				downloadBtn.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);
+		downloadBtn.setEnabled(isRecordingExists(r.getAlternateDownload()) || isRecordingExists(r.getFileHash()));
+		if (target != null) {
+			target.add(form);
+		}
+		
+		return this;
+	}
+	
+	@Override
+	protected void onDetach() {
+		rm.detach();
+		roomName.detach();
+		super.onDetach();
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		downloadBtn.setDefaultModelObject(newDownloadMenuList());
+	}
+	
+	private List<IMenuItem> newDownloadMenuList() {
+		List<IMenuItem> list = new ArrayList<>();
+
+		//avi
+		list.add(new MenuItem(getString("884"), JQueryIcon.ARROWTHICKSTOP_1_S) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			public boolean isEnabled() {
+				FlvRecording r = VideoInfo.this.rm.getObject();
+				return r != null && isRecordingExists(r.getAlternateDownload());
+			}
+			
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				download.setFileName(rm.getObject().getAlternateDownload());
+				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getAlternateDownload())));
+				download.initiate(target);
+			}
+		});
+		//flv
+		list.add(new MenuItem(getString("883"), JQueryIcon.ARROWTHICKSTOP_1_S) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			public boolean isEnabled() {
+				FlvRecording r = VideoInfo.this.rm.getObject();
+				return r != null && isRecordingExists(r.getAlternateDownload());
+			}
+			
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				download.setFileName(rm.getObject().getFileHash());
+				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getFileHash())));
+				download.initiate(target);
+			}
+		});
+		return list;
+	}
+}
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..fbbfcd5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.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.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+
+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.media.Source;
+import org.apache.wicket.markup.html.media.video.Video;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.UrlResourceReference;
+
+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 OmVideo player = new OmVideo("player", null);
+	private final Source mp4 = new Source("mp4", mp4res);
+	private final Source ogg = new Source("ogg", oggres);
+
+	public VideoPlayer(String id) {
+		this(id, null);
+	}
+	
+	public VideoPlayer(String id, FlvRecording r) {
+		super(id);
+		add(container.setOutputMarkupPlaceholderTag(true));
+		mp4.setDisplayType(true);
+		mp4.setType("video/mp4");
+		ogg.setDisplayType(true);
+		ogg.setType("video/ogg");
+		player.add(mp4, ogg);
+		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());
+			mp4.setPageParameters(pp);
+			ogg.setPageParameters(pp);
+			player.recId = r.getFlvRecordingId();
+		}
+		container.setVisible(videoExists);
+		if (target != null) {
+			target.add(container);
+		}
+		
+		return this;
+	}
+	
+	private static class OmVideo extends Video {
+		private static final long serialVersionUID = 1L;
+		Long recId = null;
+		
+		OmVideo(String id, Long recId) {
+			super(id);
+			this.recId = recId;
+		}
+		
+		@Override
+		public boolean isAutoplay() {
+			return false;
+		}
+		
+		@Override
+		public boolean hasControls() {
+			return true;
+		}
+		
+		@Override
+		public ResourceReference getPoster() {
+			return recId == null ? null : new UrlResourceReference(Url.parse("recordings/jpg/" + recId)).setContextRelative(true);
+		}
+	}
+}
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..29127bc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.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.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;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+
+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, IPartialPageRequestHandler 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/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..5192302
--- /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("click"){
+					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/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/CallbackFunctionHelper.java b/src/web/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java
new file mode 100644
index 0000000..6abc52a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.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.util;
+
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.attributes.CallbackParameter;
+
+public class CallbackFunctionHelper {
+	
+	public static StringBuilder getNamedFunction(String name, AbstractDefaultAjaxBehavior b, CallbackParameter... extraParameters) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("function ").append(name).append("(");
+		boolean first = true;
+		for (CallbackParameter curExtraParameter : extraParameters)
+		{
+			if (curExtraParameter.getFunctionParameterName() != null)
+			{
+				if (!first)
+					sb.append(',');
+				else
+					first = false;
+				sb.append(curExtraParameter.getFunctionParameterName());
+			}
+		}
+		sb.append(") {\n");
+		sb.append(b.getCallbackFunctionBody(extraParameters));
+		sb.append("}\n");
+		return sb;
+	}
+}
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..1bf3c80
--- /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) {
+		boolean isContact = getBean(UserContactsDao.class).isContact(userIdToAdd, getUserId());
+
+		if (isContact) {
+			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.isPending()) {
+			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..2ba8c09
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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();
+			if (u.getFirstname() == null && u.getLastname() == null) {
+				user = email;
+			} else {
+				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..8cac629
--- /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.room.RoomPanel;
+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.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..312602a
--- /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.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+
+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 ChoiceRenderer<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..742a27f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.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.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 implements 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);
+    };
+
+	@Override
+	public void detach() {
+	}
+}
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..1facbbe
--- /dev/null
+++ b/xdocs/ApacheDerbyConfig.xml
@@ -0,0 +1,57 @@
+<?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 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..934ad7b
--- /dev/null
+++ b/xdocs/IBMDB2Config.xml
@@ -0,0 +1,78 @@
+<?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  and then run
+						the web based installer again </li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<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..601d668
--- /dev/null
+++ b/xdocs/MSSQLConfig.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>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 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>
+						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..ab5bdd2
--- /dev/null
+++ b/xdocs/MySQLConfig.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>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 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>
+						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..85ae5ba
--- /dev/null
+++ b/xdocs/OracleConfig.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>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 and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<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..fdbc16e
--- /dev/null
+++ b/xdocs/PostgresConfig.xml
@@ -0,0 +1,73 @@
+<?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 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>
+						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/coin-slider-styles.css b/xdocs/css/coin-slider-styles.css
new file mode 100644
index 0000000..31e7d67
--- /dev/null
+++ b/xdocs/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/xdocs/css/colorbox.css b/xdocs/css/colorbox.css
new file mode 100644
index 0000000..894da5d
--- /dev/null
+++ b/xdocs/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/xdocs/css/images/animated-overlay.gif b/xdocs/css/images/animated-overlay.gif
new file mode 100644
index 0000000..d441f75
--- /dev/null
+++ b/xdocs/css/images/animated-overlay.gif
Binary files differ
diff --git a/xdocs/css/images/border.png b/xdocs/css/images/border.png
new file mode 100644
index 0000000..f463a10
--- /dev/null
+++ b/xdocs/css/images/border.png
Binary files differ
diff --git a/xdocs/css/images/controls.png b/xdocs/css/images/controls.png
new file mode 100644
index 0000000..dcfd6fb
--- /dev/null
+++ b/xdocs/css/images/controls.png
Binary files differ
diff --git a/xdocs/css/images/loading.gif b/xdocs/css/images/loading.gif
new file mode 100644
index 0000000..b4695d8
--- /dev/null
+++ b/xdocs/css/images/loading.gif
Binary files differ
diff --git a/xdocs/css/images/loading_background.png b/xdocs/css/images/loading_background.png
new file mode 100644
index 0000000..6ae83e6
--- /dev/null
+++ b/xdocs/css/images/loading_background.png
Binary files differ
diff --git a/xdocs/css/images/overlay.png b/xdocs/css/images/overlay.png
new file mode 100644
index 0000000..53ea98f
--- /dev/null
+++ b/xdocs/css/images/overlay.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_0_000088_40x100.png b/xdocs/css/images/ui-bg_flat_0_000088_40x100.png
new file mode 100644
index 0000000..b0919c2
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_0_000088_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_0_e6b900_40x100.png b/xdocs/css/images/ui-bg_flat_0_e6b900_40x100.png
new file mode 100644
index 0000000..facb4c0
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_0_e6b900_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_100_eeeeee_40x100.png b/xdocs/css/images/ui-bg_flat_100_eeeeee_40x100.png
new file mode 100644
index 0000000..b976c9b
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_100_eeeeee_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_20_000088_40x100.png b/xdocs/css/images/ui-bg_flat_20_000088_40x100.png
new file mode 100644
index 0000000..56c2330
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_20_000088_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_22_1484e6_40x100.png b/xdocs/css/images/ui-bg_flat_22_1484e6_40x100.png
new file mode 100644
index 0000000..7f3bc6b
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_22_1484e6_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_25_c5ddfc_40x100.png b/xdocs/css/images/ui-bg_flat_25_c5ddfc_40x100.png
new file mode 100644
index 0000000..724aae8
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_25_c5ddfc_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_26_2293f7_40x100.png b/xdocs/css/images/ui-bg_flat_26_2293f7_40x100.png
new file mode 100644
index 0000000..5ef1530
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_26_2293f7_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/xdocs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
new file mode 100644
index 0000000..9d2c4ad
--- /dev/null
+++ b/xdocs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_0a82eb_256x240.png b/xdocs/css/images/ui-icons_0a82eb_256x240.png
new file mode 100644
index 0000000..3001a8f
--- /dev/null
+++ b/xdocs/css/images/ui-icons_0a82eb_256x240.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_0b54d5_256x240.png b/xdocs/css/images/ui-icons_0b54d5_256x240.png
new file mode 100644
index 0000000..926aa07
--- /dev/null
+++ b/xdocs/css/images/ui-icons_0b54d5_256x240.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_5fa5e3_256x240.png b/xdocs/css/images/ui-icons_5fa5e3_256x240.png
new file mode 100644
index 0000000..81bd20c
--- /dev/null
+++ b/xdocs/css/images/ui-icons_5fa5e3_256x240.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_ffffff_256x240.png b/xdocs/css/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..4f624bb
--- /dev/null
+++ b/xdocs/css/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/xdocs/css/jquery-ui-1.10.4.custom.css b/xdocs/css/jquery-ui-1.10.4.custom.css
new file mode 100644
index 0000000..92a96fb
--- /dev/null
+++ b/xdocs/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/xdocs/css/openmeetings.css b/xdocs/css/openmeetings.css
new file mode 100644
index 0000000..ea209b8
--- /dev/null
+++ b/xdocs/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/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/js/coin-slider.min.js b/xdocs/js/coin-slider.min.js
new file mode 100644
index 0000000..b96708f
--- /dev/null
+++ b/xdocs/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/xdocs/js/jquery-1.11.0.min.js b/xdocs/js/jquery-1.11.0.min.js
new file mode 100644
index 0000000..73f33fb
--- /dev/null
+++ b/xdocs/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/xdocs/js/jquery-ui-1.10.4.custom.min.js b/xdocs/js/jquery-ui-1.10.4.custom.min.js
new file mode 100644
index 0000000..fe3e05c
--- /dev/null
+++ b/xdocs/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/xdocs/js/jquery.colorbox.js b/xdocs/js/jquery.colorbox.js
new file mode 100644
index 0000000..255a3aa
--- /dev/null
+++ b/xdocs/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/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..3f33535
--- /dev/null
+++ b/xdocs/red5sip-integration_3.0.xml
@@ -0,0 +1,317 @@
+<?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>git clone https://github.com/solomax/red5phone.git</blockquote>
+			</div>
+			<div>
+				Switch to the correct branch: <blockquote>git checkout red5sip_3.0</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..40a0906
--- /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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+<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>
