diff --git a/bigbluebutton-apps/.classpath.old b/bigbluebutton-apps/.classpath.old
new file mode 100644
index 0000000000000000000000000000000000000000..065fe37b812ecb78391185b73e96021969fd4bfc
--- /dev/null
+++ b/bigbluebutton-apps/.classpath.old
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="test/commandline"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bigbluebutton-apps/bin/HelloEvents.class b/bigbluebutton-apps/bin/HelloEvents.class
new file mode 100755
index 0000000000000000000000000000000000000000..edd819e7cfa5c70863ce57a67d300ae9d8411644
Binary files /dev/null and b/bigbluebutton-apps/bin/HelloEvents.class differ
diff --git a/bigbluebutton-apps/bin/ParseParticipants.class b/bigbluebutton-apps/bin/ParseParticipants.class
new file mode 100755
index 0000000000000000000000000000000000000000..aa28806110d2a192cdda4e7f64e38c33b2a0d34d
Binary files /dev/null and b/bigbluebutton-apps/bin/ParseParticipants.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Page.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Page.class
new file mode 100755
index 0000000000000000000000000000000000000000..4a5e06da5c8dd3dd4a22ac856b371ef858f0bea8
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Page.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Presentation.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Presentation.class
new file mode 100755
index 0000000000000000000000000000000000000000..70cb79a7fb7c2ded1f88739377fd2c7f9bb1fdb0
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Presentation.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Shape.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Shape.class
new file mode 100755
index 0000000000000000000000000000000000000000..a48e9b18f7bd52a001a1c7f8c9e1c9723e6e9cf3
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/Shape.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.class
new file mode 100755
index 0000000000000000000000000000000000000000..055affbd1a880eb3ccaa1846250f9d9f71099dff
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.class
new file mode 100755
index 0000000000000000000000000000000000000000..b02263c0e78a2ea81a892814b56964ae1343ca6e
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoomManager.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoomManager.class
new file mode 100755
index 0000000000000000000000000000000000000000..d1d2f10e175ab6ece9d8d9e98225a2a753206ff9
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoomManager.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardService.class b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardService.class
new file mode 100755
index 0000000000000000000000000000000000000000..0e0023953f67d3d231accbd762d17f231e2bcd30
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/conference/service/whiteboard/WhiteboardService.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/Conference.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/Conference.class
new file mode 100755
index 0000000000000000000000000000000000000000..a861a3b6979d7acd072cd8da0dbc31fb91e70b72
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/Conference.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/ConferenceManager.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/ConferenceManager.class
new file mode 100755
index 0000000000000000000000000000000000000000..84e808b5fcd3f6d29918767ff1ccce18c14661a7
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/ConferenceManager.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/ClientManager.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/ClientManager.class
new file mode 100755
index 0000000000000000000000000000000000000000..57480e4087f977c002c7fb4c6adc2d6cfa93aa20
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/ClientManager.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/ClientNotifier.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/ClientNotifier.class
new file mode 100755
index 0000000000000000000000000000000000000000..94cb713a09152ed0cf654e8178549fc05b8b27a8
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/ClientNotifier.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/RoomInfo.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/RoomInfo.class
new file mode 100755
index 0000000000000000000000000000000000000000..33aa636a4eb001c64bf6f2fad692fe3596daedbf
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/red5/voice/RoomInfo.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceServerListener.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceServerListener.class
new file mode 100755
index 0000000000000000000000000000000000000000..9bb2521f2821cda704809f96e20589e9784e171c
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceServerListener.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceService.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceService.class
new file mode 100755
index 0000000000000000000000000000000000000000..2753c412031c311f4f4a586fec2e3c1931b0fec6
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceService.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceServiceProvider.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceServiceProvider.class
new file mode 100755
index 0000000000000000000000000000000000000000..63853ea37f16ca1481c87429f8b0624276cd854a
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/ConferenceServiceProvider.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/Participant.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/Participant.class
new file mode 100755
index 0000000000000000000000000000000000000000..1b301e37d634ec23778ee1e80e8aea9f807dffba
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/Participant.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/Room.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/Room.class
new file mode 100755
index 0000000000000000000000000000000000000000..2bfa7e99213897131bd438e5dd5eb89d248b443a
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/Room.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/AbstractAsteriskServerListener.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/AbstractAsteriskServerListener.class
new file mode 100755
index 0000000000000000000000000000000000000000..e309fcf26b7fde70f5e8967a7322a67aa0b929b2
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/AbstractAsteriskServerListener.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/AsteriskServiceProvider.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/AsteriskServiceProvider.class
new file mode 100755
index 0000000000000000000000000000000000000000..99fab24cc5d2fbb8268949df240fcbd5066ecdec
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/AsteriskServiceProvider.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/KeepAlivePing.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/KeepAlivePing.class
new file mode 100755
index 0000000000000000000000000000000000000000..947e100ea3561626f26f0f8ca61c95808c49bc0d
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/KeepAlivePing.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceApplication.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceApplication.class
new file mode 100755
index 0000000000000000000000000000000000000000..50ea60975c6e59486a0888e38bdfeee7c2f3b84b
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceApplication.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceCommandTransformer.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceCommandTransformer.class
new file mode 100755
index 0000000000000000000000000000000000000000..2b2ac0e6d6fc7e5a4c5c3a3cfc7f0e90f5bf1b90
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceCommandTransformer.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceEventHandler.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceEventHandler.class
new file mode 100755
index 0000000000000000000000000000000000000000..d52bd676f06023fb035c3330cd5feff16fd810c3
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceEventHandler.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceEventsTransformer.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceEventsTransformer.class
new file mode 100755
index 0000000000000000000000000000000000000000..7a661c56bc35e4c500bd6e1dfb332cf4007f1dd4
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceEventsTransformer.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceManager.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceManager.class
new file mode 100755
index 0000000000000000000000000000000000000000..fb3aee43652574db6325cee76fde89b178957ab8
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/KonferenceManager.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/EjectParticipantCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/EjectParticipantCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..1b2461fbc7feba9a3b649106c2f79dc884a498cf
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/EjectParticipantCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/KonferenceCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/KonferenceCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..98ccb6153d9752812c4acfa4377255b246571ae7
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/KonferenceCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/MuteParticipantCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/MuteParticipantCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..f9e6d9759686c5c2235861f551a3b1435ddfae8f
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/MuteParticipantCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/PopulateRoomCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/PopulateRoomCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..e5d958edf473f14f0c33e8c5e218452eb9ab019b
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/actions/PopulateRoomCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceJoinEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceJoinEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..7f49aff88a630e13a9a294ee3098b7e6656fcee9
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceJoinEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceLeaveEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceLeaveEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..0f0e3acc202f039a529ec382431b49cd49d904e0
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceLeaveEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceLockEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceLockEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..25b98650fad31a151898a88ab2f03bad5070ed0c
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceLockEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMemberMuteEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMemberMuteEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..78553886ab9c5d50008c9df1f20ee2c3e6c95c02
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMemberMuteEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMemberUnmuteEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMemberUnmuteEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..0e05b7bfc362096d3d41a7106a51fd0bce969b14
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMemberUnmuteEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMuteEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMuteEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..ee9db9bd7b156855411848a2871958184b2e68f6
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceMuteEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceSoundCompleteEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceSoundCompleteEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..4be9d8d5de5f879ca84acf67d638c10c56a65baf
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceSoundCompleteEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceStateEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceStateEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..512dbf207a05e3a69562e3485079cb4aa8d12507
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceStateEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceUnlockEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceUnlockEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..32196d1aee0e71a2fb320336d5f5854788f524b6
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceUnlockEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceUnmuteEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceUnmuteEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..69eadfdbbb94358c86f2fd1c2571633e7fe8bc0a
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/ConferenceUnmuteEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/KonferenceEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/KonferenceEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..e54d67fd7bcc982711bfc302d6b54b7d866d52ca
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/konference/events/KonferenceEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeApplication.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeApplication.class
new file mode 100755
index 0000000000000000000000000000000000000000..37c5bc6ace1b889cf95748d7ce912aebe975c7b5
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeApplication.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeApplicationAdapter.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeApplicationAdapter.class
new file mode 100755
index 0000000000000000000000000000000000000000..6b78944df4204b0b1ae5ce71bd434dac5ac75111
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeApplicationAdapter.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeToBbbEventAdapter.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeToBbbEventAdapter.class
new file mode 100755
index 0000000000000000000000000000000000000000..d729709ba415fbfcb6d202029a8d3f88af2e2144
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/MeetMeToBbbEventAdapter.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/UserStateChangeListener.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/UserStateChangeListener.class
new file mode 100755
index 0000000000000000000000000000000000000000..cfc4799fac9d3b8907dc668a93f427e6d61aca6a
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/asterisk/meetme/UserStateChangeListener.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/ConferenceCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/ConferenceCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..3029c437039274da533deea76870cfb0288a40de
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/ConferenceCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/ConferenceCommandResult.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/ConferenceCommandResult.class
new file mode 100755
index 0000000000000000000000000000000000000000..134867480c83d0b6f319929b046310450053425a
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/ConferenceCommandResult.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/EjectParticipantCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/EjectParticipantCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..27fa9fa40e851a6739eac53cd8c7ea4adce5cdbe
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/EjectParticipantCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/GetParticipantsCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/GetParticipantsCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..5264eac5e5aeb44a39d2006e02d0d41590bd78a3
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/GetParticipantsCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/MuteParticipantCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/MuteParticipantCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..c71f6fee75a278ddd7efe792e943594741e52c56
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/commands/MuteParticipantCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ConferenceEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ConferenceEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..1eb02129ad8cab6c223eb8826b587332a5bd98f0
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ConferenceEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ConferenceEventListener.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ConferenceEventListener.class
new file mode 100755
index 0000000000000000000000000000000000000000..dbc692f48259b447ad6cbd16d6adb223ed0d7f95
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ConferenceEventListener.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantJoinedEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantJoinedEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..80681b39160c62ea066cb92613ff5a756e1584d2
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantJoinedEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantLeftEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantLeftEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..91dfa9f4f64d13ceef400290ddb81ed384828dcf
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantLeftEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantLockedEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantLockedEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..cc633f1e777700230486d6ba63c7b0501bf7d498
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantLockedEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantMutedEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantMutedEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..51a42eb5b935b8992a48f2f206c88f6ee918233d
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantMutedEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantTalkingEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantTalkingEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..f8f881877d0556ca578715180eb31bea299405cb
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/ParticipantTalkingEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/UnknownConferenceEvent.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/UnknownConferenceEvent.class
new file mode 100755
index 0000000000000000000000000000000000000000..2916595421709d31ed83cd6a7f2ac376cd835021
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/events/UnknownConferenceEvent.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchApplication.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchApplication.class
new file mode 100755
index 0000000000000000000000000000000000000000..74b33123fb4b123f930399ae591e6b7298effae5
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchApplication.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchHeartbeatMonitor.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchHeartbeatMonitor.class
new file mode 100755
index 0000000000000000000000000000000000000000..a1cf2a2b7db31c56e7e5cf1a9d72115939164a04
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchHeartbeatMonitor.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchServiceProvider.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchServiceProvider.class
new file mode 100755
index 0000000000000000000000000000000000000000..84f952e5447dda9ead4dde19cec7008954923caa
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/FreeswitchServiceProvider.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/EjectParticipantCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/EjectParticipantCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..d6debf0915512e33c12aa115f3db9a8dd13aaf89
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/EjectParticipantCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/FreeswitchCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/FreeswitchCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..a4e74443d8e7109654aa066b243d5252d204a4f4
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/FreeswitchCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/MuteParticipantCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/MuteParticipantCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..162bcf55560b64e5167719c0317baa2f8aded860
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/MuteParticipantCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/PopulateRoomCommand.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/PopulateRoomCommand.class
new file mode 100755
index 0000000000000000000000000000000000000000..9b845c18d5beb649c615f5c1765d8c2c39b2a9e4
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/actions/PopulateRoomCommand.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/ConferenceMember.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/ConferenceMember.class
new file mode 100755
index 0000000000000000000000000000000000000000..5d8f1c285175e36e487a584413b4a04c8e6d26fd
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/ConferenceMember.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/ConferenceMemberFlags.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/ConferenceMemberFlags.class
new file mode 100755
index 0000000000000000000000000000000000000000..1d2efaf2fc4d2eced6e42539068a053bd0a725dc
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/ConferenceMemberFlags.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/XMLResponseConferenceListParser.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/XMLResponseConferenceListParser.class
new file mode 100755
index 0000000000000000000000000000000000000000..fd35b5baada32075934ea321fd8ffcfff6b59f60
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/freeswitch/response/XMLResponseConferenceListParser.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/ParticipantImp.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/ParticipantImp.class
new file mode 100755
index 0000000000000000000000000000000000000000..afb7424bb1b4d0b4767947bf1bbc33e4073850a8
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/ParticipantImp.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/RoomImp.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/RoomImp.class
new file mode 100755
index 0000000000000000000000000000000000000000..3745f4f992a6dc1fcca9bcfe5709e676d012709d
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/RoomImp.class differ
diff --git a/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/RoomManager.class b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/RoomManager.class
new file mode 100755
index 0000000000000000000000000000000000000000..7d957eba0fcd6416f2dccc6703440a1d528f79d5
Binary files /dev/null and b/bigbluebutton-apps/bin/org/bigbluebutton/webconference/voice/internal/RoomManager.class differ
diff --git a/bigbluebutton-client/.actionScriptProperties b/bigbluebutton-client/.actionScriptProperties
index 4b034d5e4d2a2e3a779a5844c25e5da989e2a001..7ee586c5851de5c5e18f994cb1e34315b3b1e034 100755
--- a/bigbluebutton-client/.actionScriptProperties
+++ b/bigbluebutton-client/.actionScriptProperties
@@ -34,12 +34,12 @@
     <module application="src/BigBlueButton.mxml" destPath="ChatModule.swf" optimize="true" sourcePath="src/ChatModule.mxml"/>
     <module application="src/BigBlueButton.mxml" destPath="DeskShareModule.swf" optimize="true" sourcePath="src/DeskShareModule.mxml"/>
     <module application="src/BigBlueButton.mxml" destPath="PhoneModule.swf" optimize="true" sourcePath="src/PhoneModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="PresentModule.swf" optimize="true" sourcePath="src/PresentModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="ViewersModule.swf" optimize="true" sourcePath="src/ViewersModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="WhiteboardModule.swf" optimize="true" sourcePath="src/WhiteboardModule.mxml"/>
     <module application="src/BigBlueButton.mxml" destPath="VideoconfModule.swf" optimize="true" sourcePath="src/VideoconfModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="DynamicInfoModule.swf" optimize="true" sourcePath="src/DynamicInfoModule.mxml"/>
+    <module application="src/BigBlueButton.mxml" destPath="WhiteboardModule.swf" optimize="true" sourcePath="src/WhiteboardModule.mxml"/>
+    <module application="src/BigBlueButton.mxml" destPath="PresentModule.swf" optimize="true" sourcePath="src/PresentModule.mxml"/>
     <module application="src/BigBlueButton.mxml" destPath="ListenersModule.swf" optimize="true" sourcePath="src/ListenersModule.mxml"/>
+    <module application="src/BigBlueButton.mxml" destPath="DynamicInfoModule.swf" optimize="true" sourcePath="src/DynamicInfoModule.mxml"/>
+    <module application="src/BigBlueButton.mxml" destPath="ViewersModule.swf" optimize="true" sourcePath="src/ViewersModule.mxml"/>
   </modules>
   <buildCSSFiles/>
 </actionScriptProperties>
diff --git a/bigbluebutton-client/libs/as3corelib.swc b/bigbluebutton-client/libs/as3corelib.swc
new file mode 100755
index 0000000000000000000000000000000000000000..c1480d38fb8a6db7f2efd692bdffaf4b3b0fd10f
Binary files /dev/null and b/bigbluebutton-client/libs/as3corelib.swc differ
diff --git a/bigbluebutton-client/libs/googleas3api.swc b/bigbluebutton-client/libs/googleas3api.swc
new file mode 100755
index 0000000000000000000000000000000000000000..9d41c926ba5abe72bd5cf9bd1505c403c1dfb476
Binary files /dev/null and b/bigbluebutton-client/libs/googleas3api.swc differ
diff --git a/bigbluebutton-client/src/ChatModule.mxml b/bigbluebutton-client/src/ChatModule.mxml
index 41835c812e6078245638adcc7e412b56b79b26e5..49be082b90b6d5073d3dcaea239a98f3a96a04a4 100755
--- a/bigbluebutton-client/src/ChatModule.mxml
+++ b/bigbluebutton-client/src/ChatModule.mxml
@@ -36,6 +36,8 @@
 		<![CDATA[
 			import com.asfusion.mate.events.Dispatcher;
 			
+			import mx.controls.Alert;
+			
 			import org.bigbluebutton.common.LogUtil;
 			import org.bigbluebutton.modules.chat.events.ChatEvent;
 			import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent;
@@ -119,10 +121,12 @@
 			private function handleTranscriptLoadedEvent(event:Event):void {
 				LogUtil.debug("Handling TranscriptLoadedEvent");
 				var welcome:String = _attributes.welcome as String;
-				var welcomeEvent:PublicChatMessageEvent = new PublicChatMessageEvent(PublicChatMessageEvent.PUBLIC_CHAT_MESSAGE_EVENT);
-				welcomeEvent.message = welcome;
-				var globalDispatcher:Dispatcher = new Dispatcher();
-				globalDispatcher.dispatchEvent(welcomeEvent);
+				if (welcome != ""){
+					var welcomeEvent:PublicChatMessageEvent = new PublicChatMessageEvent(PublicChatMessageEvent.PUBLIC_CHAT_MESSAGE_EVENT);
+					welcomeEvent.message = welcome;
+					var globalDispatcher:Dispatcher = new Dispatcher();
+					globalDispatcher.dispatchEvent(welcomeEvent);
+				}	
 			}
 		]]>
 	</mx:Script>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/ChatOptionsEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/ChatOptionsEvent.as
old mode 100644
new mode 100755
index 194e85af15cda412648183a85ac638a59199f887..6445138ee5194e747f7b05957fda81c2a4cfbac0
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/ChatOptionsEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/ChatOptionsEvent.as
@@ -5,8 +5,11 @@ package org.bigbluebutton.modules.chat.events
 	public class ChatOptionsEvent extends Event
 	{
 		public static const CHANGE_FONT_SIZE:String = "Change Font Size";
+		public static const CHANGE_LANGUAGE:String = "Change Language";
+		public static const TOGGLE_TRANSLATE:String = "Toggle Translate";
 		
 		public var fontSize:int;
+		public var language:String="";
 		
 		public function ChatOptionsEvent(type:String)
 		{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPrivateChatMessageEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPrivateChatMessageEvent.as
old mode 100644
new mode 100755
index 37c89ea9b58ee06d9876134e3a36b48280d15d1f..d2dfa6b7e11fdbb2dc100e3216a1cc059bc20caa
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPrivateChatMessageEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPrivateChatMessageEvent.as
@@ -9,6 +9,7 @@ package org.bigbluebutton.modules.chat.events
 		public var toUser:String;
 		public var time:String;
 		public var color:String;
+		public var language:String;
 				
 		public function SendPrivateChatMessageEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
 		{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPublicChatMessageEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPublicChatMessageEvent.as
index bc17e369a1e7e21eeddd6f8b60960f739af6b250..651ff127460dccb05ea0cad8bb3d7cd730a9a1e3 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPublicChatMessageEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/events/SendPublicChatMessageEvent.as
@@ -9,6 +9,7 @@ package org.bigbluebutton.modules.chat.events
 		public var message:String;
 		public var time:String;
 		public var color:String;
+		public var language:String;
 		
 		public function SendPublicChatMessageEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
 		{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMap.mxml
index 13234a36c398578513c3e19073c5220f45342ef3..85114ec062f4e22e7bd7701fdf97110938dba4d0 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMap.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMap.mxml
@@ -11,7 +11,6 @@
 			import org.bigbluebutton.main.events.OpenWindowEvent;
 			import org.bigbluebutton.modules.chat.events.ChatEvent;
 			import org.bigbluebutton.modules.chat.events.ConnectionEvent;
-			import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent;
 			import org.bigbluebutton.modules.chat.events.QueryParticipantsEvent;
 			import org.bigbluebutton.modules.chat.events.SendPrivateChatMessageEvent;
 			import org.bigbluebutton.modules.chat.events.SendPublicChatMessageEvent;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatService.as
old mode 100644
new mode 100755
index fd1cab64a46df07a0afb982257002ee0cb1e310f..0b86bd1436cb3c2c97416e43b8f50167fca47c0f
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatService.as
@@ -32,8 +32,9 @@ package org.bigbluebutton.modules.chat.services
 		public function sendChatMessageEvent(event:SendPrivateChatMessageEvent):void {
 			trace("Receive receivedSendPrivateChatMessageEvent");
 			var newMessage:String;			
-			newMessage = "<font color=\"#" + event.color + "\"><b>[" + 
-						attributes.username +" - "+ event.time + "]</b> " + event.message + "</font><br/>";
+			/*newMessage = "<font color=\"#" + event.color + "\"><b>[" + 
+						attributes.username +" - "+ event.time + "]</b> " + event.message + "</font><br/>";*/
+			newMessage = event.message + "|" + attributes.username + "|" + event.color + "|" + event.time + "|" + event.language;
 			var messageVO:MessageVO = new MessageVO(newMessage, attributes.userid, event.toUser);
 			chatSOService.sendMessage(messageVO);
 		}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatService.as
index 455cc28a8873df67a50fada94f174a0fd6bc7568..3c1e9aaa1b2f781a31a90e4f3fa1e0fa1fb3bea4 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatService.as
@@ -27,8 +27,9 @@ package org.bigbluebutton.modules.chat.services
 		public function sendChatMessageEvent(event:SendPublicChatMessageEvent):void {
 			trace("Receive receivedSendPublicChatMessageEvent");
 			var newMessage:String;			
-			newMessage = "<font color=\"#" + event.color + "\"><b>[" + 
-						attributes.username +" - "+ event.time + "]</b> " + event.message + "</font><br/>";			
+			/*newMessage = "<font color=\"#" + event.color + "\"><b>[" + 
+						attributes.username +" - "+ event.time + "]</b> " + event.message + "</font><br/>";			*/
+			newMessage = event.message + "|" + attributes.username + "|" + event.color + "|" + event.time + "|" + event.language;
 			chatSOService.sendMessage(newMessage);
 		}
 	}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/AddChatTabBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/AddChatTabBox.mxml
index d479e59c0d4b448ffc3ee51d101a93f864563371..ff3e811a4870561ec940175effa80d6be5f32dc2 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/AddChatTabBox.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/AddChatTabBox.mxml
@@ -6,14 +6,122 @@
 			import mx.collections.ArrayCollection;
 			import mx.controls.Alert;
 			import mx.events.ListEvent;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
 			
 			import org.bigbluebutton.modules.chat.events.ChatOptionsEvent;
+			import org.bigbluebutton.util.i18n.ResourceUtil;
 			
 			[Bindable] public var participants:ArrayCollection;
 			[Bindable] public var chatView:ChatView;
 			[Bindable] private var fontSizes:Array = ['8', '10', '12', '14', '16', '18'];
 			
+			[Bindable] private var langNames:Array=[ 
+								'AFRIKAANS' , 
+								'ALBANIAN' , 
+								'ARABIC' , 
+								'BELARUSIAN' , 
+								'BULGARIAN' , 
+								'CATALAN' , 
+								'CHINESE' , 
+								'CHINESE_SIMPLIFIED' , 
+								'CHINESE_TRADITIONAL' , 
+								'CZECH' ,  
+								'DANISH' , 
+								'DUTCH',   
+								'ENGLISH' , 
+								'ESTONIAN' , 
+								'FILIPINO' , 
+								'FINNISH' , 
+								'FRENCH' ,  
+								'GALICIAN' , 
+								'GERMAN' , 
+								'GREEK' , 
+								'HEBREW' , 
+								'HINDI' , 
+								'HUNGARIAN' , 
+								'ICELANDIC' , 
+								'INDONESIAN' , 
+								'IRISH' , 
+								'ITALIAN' , 
+								'JAPANESE' , 
+								'KOREAN' , 
+								'LATVIAN' , 
+								'LITHUANIAN' , 
+								'MACEDONIAN' , 
+								'MALAY' , 
+								'MALTESE' , 
+								'NORWEGIAN' , 
+								'PERSIAN' , 
+								'POLISH' , 
+								'PORTUGUESE' , 
+								'ROMANIAN' , 
+								'RUSSIAN' , 
+								'SERBIAN' , 
+								'SLOVAK' , 
+								'SLOVENIAN' , 
+								'SPANISH' , 
+								'SWAHILI' , 
+								'SWEDISH' , 
+								'THAI' , 
+								'TURKISH' , 
+								'UKRAINIAN' , 
+								'VIETNAMESE' , 
+								'WELSH' ,  
+								'YIDDISH' ]  ;
+			
+			private var langCodes:Array=[
+									'af', 
+									'sq', 
+									'ar', 
+									'be', 
+									'bg', 
+									'ca', 
+									'zh', 
+									'zh-CN', 
+									'zh-TW', 
+									'cs', 
+									'da', 
+									'nl',   
+									'en', 
+									'et', 
+									'tl', 
+									'fi', 
+									'fr', 
+									'gl', 
+									'de', 
+									'el', 
+									'iw', 
+									'hi', 
+									'hu', 
+									'is', 
+									'id', 
+									'ga', 
+									'it', 
+									'ja', 
+									'ko', 
+									'lv', 
+									'lt', 
+									'mk', 
+									'ms', 
+									'mt', 
+									'no', 
+									'fa', 
+									'pl', 
+									'pt-PT', 
+									'ro', 
+									'ru', 
+									'sr', 
+									'sk', 
+									'sl', 
+									'es', 
+									'sw', 
+									'sv', 
+									'th', 
+									'tr', 
+									'uk', 
+									'vi', 
+									'cy', 
+									'yi']  ;
+			
 			private function init():void{
 				participants = new ArrayCollection();
 			}
@@ -31,6 +139,20 @@
 				e.fontSize = int(cmbFontSize.selectedItem);
 				dispatchEvent(e);
 			}
+			
+			private function changeLanguage():void
+			{
+				var e:ChatOptionsEvent = new ChatOptionsEvent(ChatOptionsEvent.CHANGE_LANGUAGE);
+				e.language=this.langCodes[this.langComboBox.selectedIndex];
+				dispatchEvent(e);
+			}
+			
+			private function toggleTranslation():void
+			{
+				
+				var e:ChatOptionsEvent=new ChatOptionsEvent(ChatOptionsEvent.TOGGLE_TRANSLATE);	
+				dispatchEvent(e);
+			}
 
 		]]>
 	</mx:Script>
@@ -47,6 +169,8 @@
 				<mx:Label text="{ResourceUtil.getInstance().getString('bbb.chat.fontSize')}" />
 				<mx:ComboBox width="60" id="cmbFontSize" dataProvider="{fontSizes}" close="changeFontSize()" selectedIndex="1" />
 			</mx:HBox>
+			<mx:ComboBox id="langComboBox" dataProvider="{this.langNames}" selectedIndex="12"  change="changeLanguage()"> </mx:ComboBox>
+			<mx:CheckBox id="autoTransCheckBox" selected="false" label="AutoTranslate" toolTip="Auto detect language and translate" change="toggleTranslation()"/>
 		</mx:VBox>
 	</mx:HBox>
 	
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatBox.mxml
old mode 100644
new mode 100755
index fa36adda30704e9ba2c1dd6247ca41f1b492f4d2..9c4dfc6e5b299a1307722b1166c55e8c71e35014
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatBox.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatBox.mxml
@@ -1,13 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
-<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" click="setMessageRead()" xmlns:mate="http://mate.asfusion.com/">
+<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" click="setMessageRead()" xmlns:mate="http://mate.asfusion.com/" >
 	
 	<mate:Listener type="{ChatOptionsEvent.CHANGE_FONT_SIZE}" method="changeFontSize" />
 	
 	<mx:Script>
 		<![CDATA[
+			import be.boulevart.google.ajaxapi.translation.GoogleTranslation;
+			import be.boulevart.google.ajaxapi.translation.data.GoogleTranslationResult;
+			import be.boulevart.google.events.GoogleApiEvent;
+			
+			import com.adobe.serialization.json.JSON;
+			
+			import mx.collections.ArrayCollection;
+			import mx.controls.Alert;
 			import mx.controls.Button;
+			import mx.core.ScrollPolicy;
 			
 			import org.bigbluebutton.modules.chat.events.ChatOptionsEvent;
+			import org.bigbluebutton.modules.chat.views.components.ChatMessageRenderer;
 			
 			public var read:Boolean = true;
 			public var participantLoggedOut:Boolean = false;
@@ -15,13 +25,60 @@
 			[Bindable]
 			private var backgroundColor:uint = 0x000000;
 			
+			[Bindable] private var messages:ArrayCollection = new ArrayCollection();
+			
 			private function updateScroll():void{
-				txtChatBox.verticalScrollPosition = txtChatBox.maxVerticalScrollPosition;
+				chatMessagesList.verticalScrollPosition = chatMessagesList.maxVerticalScrollPosition;
+			}
+			
+			public function showNewMessage(message:String, translate:Boolean, language:String = null):void
+			{	
+				var timeString:String = getHours() + ":" + getMinutes();
+				var components:Array = message.split("|");
+				
+				var msg:Object = new Object();
+				
+				if (translate && (language != null)){
+					translateMessage(components[0].toString(), components[4].toString(), language.toString());
+					msg.senderText = components[0];
+				} else{
+					msg.text = components[0];
+					msg.senderText = components[0];
+				}
+				
+				msg.name = components[1];
+				msg.color = uint(components[2]);
+				msg.senderTime = components[3];			
+				msg.time = timeString;
+				
+				messages.addItem(msg);
+			}
+			
+			private function translateMessage(text:String, fromLang:String, toLang:String):void{
+				var g:GoogleTranslation = new GoogleTranslation();
+				g.addEventListener(GoogleApiEvent.TRANSLATION_RESULT, onTranslationDone);
+				g.translate(text, fromLang, toLang);
+			}
+			
+			private function onTranslationDone(e:GoogleApiEvent):void{
+				messages.getItemAt(messages.length - 1).text = (e.data as GoogleTranslationResult).result;
+				chatMessagesList.invalidateList();
 			}
 			
-			public function showNewMessage(message:String):void
-			{
-				txtChatBox.htmlText += message;
+			public static function getMinutes():String{
+				var time:Date = new Date();
+				var minutes:String;
+				if (time.minutes < 10) minutes = "0" + time.minutes;
+				else minutes = "" + time.minutes;
+				return minutes;
+			}
+			
+			public static function getHours():String{
+				var time:Date = new Date();
+				var hours:String;
+				if (time.hours < 10) hours = "0" + time.hours;
+				else hours = "" + time.hours;
+				return hours
 			}
 			
 			public function setMessageUnread():void{
@@ -46,6 +103,7 @@
 			
 		]]>
 	</mx:Script>
-	<mx:TextArea id="txtChatBox" editable="false" width="100%" height="100%" 
-		focusEnabled="false" updateComplete="updateScroll()" link="onLinkClick(event)"/>
+	
+	<mx:List width="100%" height="100%" id="chatMessagesList" updateComplete="updateScroll()"
+			 itemRenderer="org.bigbluebutton.modules.chat.views.components.ChatMessageRenderer" dataProvider="{messages}" />
 </mx:VBox>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatMessageRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatMessageRenderer.mxml
new file mode 100755
index 0000000000000000000000000000000000000000..9bed0fb65cd9051e8c9a95165af67d1aea26d997
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatMessageRenderer.mxml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" borderStyle="solid" verticalAlign="middle" rollOver="onRollOver()" rollOut="onRollOut()">
+	
+	<mx:Script>
+		<![CDATA[
+			
+			[Bindable] private var rolledOver:Boolean = false;
+			
+			/**
+			 * Chat Message Dynamic Object Anatomy:
+			 * data.name - The name of the sender of the message
+			 * data.senderTime - Local time in the sender's time zone
+			 * data.time - Local time in recepient time zone
+			 * data.senderText - The text of the message as it appeared on the sender's end
+			 * data.text - The text contained in the message when translated to the recepient's language
+			 * data.color - The color of the text as choosen by the sender
+			 */
+			
+			private function onLinkClick(e:TextEvent):void{
+				var url:URLRequest = new URLRequest(e.text);
+				navigateToURL(url, '_blank');
+			}
+			
+			private function onRollOver():void{
+				//rolledOver = true;
+				txtMessage.htmlText = data.senderText;
+			}
+			
+			private function onRollOut():void{
+				//rolledOver = false;
+				txtMessage.htmlText = data.text;
+			}
+			
+		]]>
+	</mx:Script>
+	
+	<mx:VBox width="15%" verticalGap="0" bottom="0" top="0" paddingBottom="0" paddingTop="0">
+		<mx:Label id="lblName" text="{data.name}" top="0" bottom="0" paddingBottom="0" paddingTop="0" />
+		<mx:Label id="lblTime" text="{rolledOver ? data.senderTime : data.time}" top="0" bottom="0" paddingBottom="0" paddingTop="0" />
+	</mx:VBox>
+	<mx:VRule height="30" />
+	<mx:Text id="txtMessage" width="85%" htmlText="{rolledOver ? data.senderText : data.text}" link="onLinkClick(event)" color="{data.color}" />
+</mx:HBox>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatView.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatView.mxml
index faa62b7f665d52fc1ef1d108e5f6db1911bc7c42..2d9b5d6693b47f7c9390b34a0f217e69971936bf 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatView.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/components/ChatView.mxml
@@ -10,6 +10,8 @@
 	<mate:Listener type="{PublicChatMessageEvent.PUBLIC_CHAT_MESSAGE_EVENT}" method="handlePublicChatMessageEvent"/>
 	<mate:Listener type="{BBBEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT}" method="sendMessageReceivedFromBBBEvent"/> 
 	<mate:Listener type="{ChatOptionsEvent.CHANGE_FONT_SIZE}" method="changeFontSize" />
+	<mate:Listener type="{ChatOptionsEvent.CHANGE_LANGUAGE}" method="changeLanguage" />
+	<mate:Listener type="{ChatOptionsEvent.TOGGLE_TRANSLATE}" method="toggleTranslation" />
 	
 	<mx:Style>
 		.colorPickerStyle {
@@ -32,7 +34,9 @@
 	
 	<mx:Script>
 		<![CDATA[
-			import org.bigbluebutton.common.LogUtil;
+			import be.boulevart.google.ajaxapi.translation.GoogleTranslation;
+			import be.boulevart.google.events.GoogleApiEvent;
+			
 			import com.asfusion.mate.events.Dispatcher;
 			
 			import flash.external.ExternalInterface;
@@ -46,6 +50,7 @@
 			import mx.core.UIComponent;
 			import mx.events.IndexChangedEvent;
 			
+			import org.bigbluebutton.common.LogUtil;
 			import org.bigbluebutton.main.api.IUserListener;
 			import org.bigbluebutton.main.api.UserManager;
 			import org.bigbluebutton.main.events.BBBEvent;
@@ -75,6 +80,9 @@
 			
 			private var globalDispatcher:Dispatcher = new Dispatcher();
 			
+			private var autoTranslation:Boolean=false;
+			private var currentLangCode:String="en";
+			
 			[Bindable]
 			public var participants:ArrayCollection = new ArrayCollection();
 			
@@ -90,6 +98,9 @@
 				
 				UserManager.getInstance().registerListener(this);
 				
+				//var g:GoogleTranslation = new GoogleTranslation();
+				//var e:GoogleApiEvent;
+				
 				//setColor(); //Uncomment this to automatically assign colors to chat participants
 			}       
 			
@@ -148,9 +159,7 @@
 			
 			private function currentTime() : String
 			{
-				var date:Date = new Date();
-				var t:String = date.toLocaleTimeString();
-				return t;
+				return ChatBox.getHours() + ":" + ChatBox.getMinutes();
 			}
 			
 			private function sendMessages():void
@@ -203,8 +212,9 @@
 				trace("Sending public chat message");
 				var publicEvent:SendPublicChatMessageEvent = new SendPublicChatMessageEvent(SendPublicChatMessageEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT);
 				publicEvent.message = parseURLs(cleanup(txtMsg.text));
-				publicEvent.color = cmpColorPicker.selectedColor.toString(16);
+				publicEvent.color = cmpColorPicker.selectedColor.toString();
 				publicEvent.time = currentTime();
+				publicEvent.language = currentLangCode;
 				globalDispatcher.dispatchEvent(publicEvent);
 			}
 			
@@ -219,8 +229,9 @@
 				var privateEvent:SendPrivateChatMessageEvent = new SendPrivateChatMessageEvent(SendPrivateChatMessageEvent.SEND_PRIVATE_CHAT_MESSAGE_EVENT);
 				privateEvent.message = parseURLs(cleanup(txtMsg.text));
 				privateEvent.toUser = chatTabs.selectedChild.name;
-				privateEvent.color = cmpColorPicker.selectedColor.toString(16);
+				privateEvent.color = cmpColorPicker.selectedColor.toString();
 				privateEvent.time = currentTime();
+				privateEvent.language = currentLangCode;
 				globalDispatcher.dispatchEvent(privateEvent);
 			}
 			
@@ -369,7 +380,7 @@
 				}
 				
 				chatBox = getChatBoxForParticipant(sender);
-				chatBox.showNewMessage(message);
+				chatBox.showNewMessage(message, autoTranslation, currentLangCode);
 				
 				if (! isChatBoxCurrentlySelected(sender)) {
 					notifyParticipantOfUnreadMessageFrom(sender);
@@ -411,17 +422,26 @@
 			}
 			/** end IUserListener methods */
 			
+			private function toggleTranslation(e:ChatOptionsEvent):void
+			{
+				this.autoTranslation=!this.autoTranslation;
+			}
+			
+			private function changeLanguage(e:ChatOptionsEvent):void
+			{
+				this.currentLangCode=e.language;
+			}
+			
 		]]>
 	</mx:Script>
 	<containers:SuperTabNavigator id="chatTabs" width="100%" height="100%" change="onTabNavChange()" tabClose="onTabClose(event)" minTabWidth="20" 
 								  dragEnabled="false" popUpButtonPolicy="off"/>
 	
 	<mx:ApplicationControlBar id="chatCtrlBar" width="100%" height="10%">		
-		<mx:TextInput id="txtMsg" width="100%" enter="sendMessages()"/>
+		<mx:TextInput id="txtMsg" width="100%" enter="sendMessages()" color="{cmpColorPicker.selectedColor}"/>
 		<mx:ColorPicker id="cmpColorPicker" showTextField="false" toolTip="{ResourceUtil.getInstance().getString('bbb.chat.cmpColorPicker.toolTip')}" 
 						selectedColor="0x000000" dataProvider="{colorPickerColours}" swatchPanelStyleName="colorPickerStyle"/>
 		<mx:Button label="{ResourceUtil.getInstance().getString('bbb.chat.sendBtn')}" id="sendBtn" 
-				   toolTip="{ResourceUtil.getInstance().getString('bbb.chat.sendBtn.toolTip')}" click="sendMessages()"/>	
-		<!--<mx:ComboBox id="participantList" dataProvider="{participants}" close="onOpenChatBox()" />	-->	    
+				   toolTip="{ResourceUtil.getInstance().getString('bbb.chat.sendBtn.toolTip')}" click="sendMessages()"/> 
 	</mx:ApplicationControlBar>	
 </mx:VBox>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/PhoneEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/PhoneEventMap.mxml
index 7a0e4df4bff9ef75c6f6728a93ccf4d4c8c391ba..99ee153c2fa4281fde36061f59b2d968acc01ae1 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/PhoneEventMap.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/PhoneEventMap.mxml
@@ -45,7 +45,6 @@
 			import org.bigbluebutton.modules.chat.services.PrivateChatService;
 			import org.bigbluebutton.main.events.OpenWindowEvent;
 			import org.bigbluebutton.modules.chat.events.ConnectionEvent;
-			import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent;
 			import org.bigbluebutton.modules.chat.services.PublicChatService;
 			import mx.events.FlexEvent;
 		]]>