http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
deleted file mode 100644
index 1fc7406..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
+++ /dev/null
@@ -1,896 +0,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.
- */
-package org.apache.openmeetings.db.entity.room;
-
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.openmeetings.db.entity.basic.IClient;
-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.userId = :userId"),
-       @NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM Client 
c WHERE c.roomId = :roomId"),
-       @NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.roomId FROM 
Client c WHERE c.server = :server GROUP BY c.roomId")
-})
-@Table(name = "client")
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Client implements IClient {
-       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", nullable = false)
-       private boolean isMod = false;
-
-       /**
-        * @see Client#getIsSuperModerator()
-        */
-       @Column(name = "is_supermoderator", nullable = false)
-       private boolean isSuperModerator = false;
-
-       /**
-        * @see Client#getCanDraw()
-        */
-       @Column(name = "can_draw", nullable = false)
-       private boolean canDraw = false;
-
-       /**
-        * @see Client#getCanShare()
-        */
-       @Column(name = "can_share", nullable = false)
-       private boolean canShare = false;
-
-       /**
-        * @see Client#getCanRemote()
-        */
-       @Column(name = "can_remote", nullable = false)
-       private boolean canRemote = false;
-
-       /**
-        * @see Client#getCanGiveAudio()
-        */
-       @Column(name = "can_giveaudio", nullable = false)
-       private boolean canGiveAudio = false;
-
-       @Column(name = "can_video", nullable = false)
-       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#isScreenClient()
-        */
-       @Column(name = "is_screenclient", nullable = false)
-       private boolean screenClient;
-
-       /**
-        * @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#getRoomId()
-        */
-       @Column(name = "room_id")
-       private Long roomId;
-
-       /**
-        * @see Client#getRoomEnter()
-        */
-       @Column(name = "room_enter")
-       private Date roomEnter = null;
-
-       /**
-        * @see Client#getBroadCastID()
-        */
-       @Column(name = "broadcast_id")
-       private long broadCastID = -2;
-
-       /**
-        * @see Client#getUserId()
-        */
-       @Column(name = "user_id")
-       private Long userId = 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#getSecurityCode()
-        */
-       @Column(name = "security_code")
-       private String securityCode;
-
-       /**
-        * @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;
-
-       @Column(name = "tcurl", length=2048)
-       private String tcUrl;
-
-       @Column(name = "nativeSsl", nullable = false)
-       private boolean nativeSsl = false;
-
-       /**
-        * @see Client#getIsRecording()
-        */
-       @Column(name = "is_recording", nullable = false)
-       private boolean isRecording = false;
-
-       /**
-        * @see Client#getRoomRecordingName()
-        */
-       @Column(name = "room_recording_name")
-       private String roomRecordingName;
-
-       /**
-        * @see Client#getRecordingId()
-        */
-       @Column(name = "recording_id")
-       private Long recordingId;
-
-       /**
-        * @see Client#getRecordingMetaDataId()
-        */
-       @Column(name = "recording_metadata_id")
-       private Long recordingMetaDataId;
-
-       /**
-        * @see Client#isStartRecording()
-        */
-       @Column(name = "start_recording", nullable = false)
-       private boolean startRecording = false;
-
-       /**
-        * @see Client#isStartStreaming()
-        */
-       @Column(name = "start_streaming", nullable = false)
-       private boolean startStreaming = false;
-
-       /**
-        * @see Client#isScreenPublishStarted()
-        */
-       @Column(name = "screen_publish_started", nullable = false)
-       private boolean screenPublishStarted = false;
-
-       /**
-        * @see Client#isStreamPublishStarted()
-        */
-       @Column(name = "stream_publish_started", nullable = false)
-       private boolean streamPublishStarted = false;
-
-       /**
-        * @see Client#getIsBroadcasting()
-        */
-       @Column(name = "is_broadcasting", nullable = false)
-       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", nullable = false)
-       private boolean allowRecording = true;
-
-       /**
-        * @see Client#getZombieCheckFlag()
-        */
-       @Column(name = "zombie_check_flag", nullable = false)
-       private boolean zombieCheckFlag = false;
-
-       /**
-        * @see Client#getMicMuted()
-        */
-       @Column(name = "mic_muted", nullable = false)
-       private boolean micMuted = false;
-
-       /**
-        * @see Client#isSipTransport()
-        */
-       @Column(name = "sip_transport", nullable = false)
-       private boolean sipTransport = false;
-
-       @Column(name = "mobile", nullable = false)
-       private boolean mobile = false;
-
-       @ManyToOne(fetch = FetchType.LAZY)
-       @JoinColumn(name = "server_id")
-       private Server server;
-
-       public Client() {}
-
-       public Client(String streamid, String publicSID, Long roomId,
-                       Long userId, String firstname, String lastname,
-                       String username, String connectedSince, String scope) {
-               super();
-               this.streamid = streamid;
-               this.publicSID = publicSID;
-               this.roomId = roomId;
-               this.userId = userId;
-               this.firstname = firstname;
-               this.lastname = lastname;
-               this.username = username;
-               this.connectedSince = 
CalendarPatterns.parseDateWithHour(connectedSince);
-               this.scope = scope;
-       }
-
-       public void setUserObject(Long userId, String username, String 
firstname, String lastname) {
-               this.userId = userId;
-               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;
-       }
-
-       @Override
-       public Long getId() {
-               return id;
-       }
-
-       @Override
-       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 getSecurityCode() {
-               return securityCode;
-       }
-
-       public void setSecurityCode(String securityCode) {
-               this.securityCode = securityCode;
-       }
-
-       public String getPicture_uri() {
-               return picture_uri;
-       }
-
-       public void setPicture_uri(String picture_uri) {
-               this.picture_uri = picture_uri;
-       }
-
-       public Long getUserId() {
-               return userId;
-       }
-
-       public void setUserId(Long userId) {
-               this.userId = userId;
-       }
-
-       public Long getRoomId() {
-               return roomId;
-       }
-
-       public void setRoomId(Long roomId) {
-               this.roomId = roomId;
-       }
-
-       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 isScreenClient() {
-               return screenClient;
-       }
-
-       public void setScreenClient(boolean screenClient) {
-               this.screenClient = screenClient;
-       }
-
-       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 getRecordingId() {
-               return recordingId;
-       }
-
-       public void setRecordingId(Long recordingId) {
-               this.recordingId = recordingId;
-       }
-
-       public Long getRecordingMetaDataId() {
-               return recordingMetaDataId;
-       }
-
-       public void setRecordingMetaDataId(Long recordingMetaDataId) {
-               this.recordingMetaDataId = recordingMetaDataId;
-       }
-
-       public boolean isScreenPublishStarted() {
-               return screenPublishStarted;
-       }
-
-       public void setScreenPublishStarted(boolean screenPublishStarted) {
-               this.screenPublishStarted = screenPublishStarted;
-       }
-
-       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 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;
-       }
-
-       public String getTcUrl() {
-               return tcUrl;
-       }
-
-       public void setTcUrl(String tcUrl) {
-               this.tcUrl = tcUrl;
-       }
-
-       public boolean isNativeSsl() {
-               return nativeSsl;
-       }
-
-       public void setNativeSsl(boolean nativeSsl) {
-               this.nativeSsl = nativeSsl;
-       }
-
-       @Override
-       public String toString() {
-               return "Client [streamid=" + streamid + ", publicSID=" + 
publicSID + ", isScreenClient=" + screenClient
-                               + ", isMobile = " + mobile + ", roomId=" + 
roomId + ", broadCastID=" + broadCastID + ", userId="
-                               + userId + ", avsettings=" + avsettings + ", 
isRecording=" + isRecording + ", recordingId="
-                               + recordingId + ", recordingMetaDataId=" + 
recordingMetaDataId + ", screenPublishStarted="
-                               + screenPublishStarted + ", interviewPodId=" + 
interviewPodId + ", server=" + server + "]";
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index 36cfd33..3e095cf 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -303,7 +303,7 @@ public class Room implements IDataProviderEntity {
        private List<RoomGroup> roomGroups = new ArrayList<>();
 
        @Transient
-       private List<Client> currentusers;
+       private List<StreamClient> currentusers;
 
        public String getComment() {
                return comment;
@@ -371,11 +371,11 @@ public class Room implements IDataProviderEntity {
                this.ispublic = ispublic;
        }
 
-       public List<Client> getCurrentusers() {
+       public List<StreamClient> getCurrentusers() {
                return currentusers;
        }
 
-       public void setCurrentusers(List<Client> currentusers) {
+       public void setCurrentusers(List<StreamClient> currentusers) {
                this.currentusers = currentusers;
        }
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
new file mode 100644
index 0000000..2dc1fae
--- /dev/null
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
@@ -0,0 +1,896 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.openmeetings.db.entity.basic.IClient;
+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.userId = :userId"),
+       @NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM Client 
c WHERE c.roomId = :roomId"),
+       @NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.roomId FROM 
Client c WHERE c.server = :server GROUP BY c.roomId")
+})
+@Table(name = "client")
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class StreamClient implements IClient {
+       private static final long serialVersionUID = 1L;
+
+       @Id
+       @GeneratedValue(strategy = GenerationType.IDENTITY)
+       @Column(name = "id")
+       private Long id;
+
+       /**
+        * @see StreamClient#getUsername()
+        */
+       @Column(name = "username")
+       private String username = "";
+
+       /**
+        * @see StreamClient#getStreamid()
+        */
+       @Column(name = "streamid")
+       private String streamid = "";
+
+       /**
+        * @see StreamClient#getScope()
+        */
+       @Column(name = "scope")
+       private String scope = "";
+
+       /**
+        * @see StreamClient#getVWidth()
+        */
+       @Column(name = "vwidth")
+       private int vWidth = 0;
+
+       /**
+        * @see StreamClient#getVHeight()
+        */
+       @Column(name = "vheight")
+       private int vHeight = 0;
+
+       /**
+        * @see StreamClient#getVX()
+        */
+       @Column(name = "vx")
+       private int vX = 0;
+
+       /**
+        * @see StreamClient#getVY()
+        */
+       @Column(name = "vy")
+       private int vY = 0;
+
+       /**
+        * @see StreamClient#getStreamPublishName()
+        */
+       @Column(name = "stream_publish_name")
+       private String streamPublishName = "";
+
+       /**
+        * @see StreamClient#getPublicSID()
+        */
+       @Column(name = "public_sid")
+       private String publicSID = "";
+
+       /**
+        * @see StreamClient#getIsMod()
+        */
+       @Column(name = "is_mod", nullable = false)
+       private boolean isMod = false;
+
+       /**
+        * @see StreamClient#getIsSuperModerator()
+        */
+       @Column(name = "is_supermoderator", nullable = false)
+       private boolean isSuperModerator = false;
+
+       /**
+        * @see StreamClient#getCanDraw()
+        */
+       @Column(name = "can_draw", nullable = false)
+       private boolean canDraw = false;
+
+       /**
+        * @see StreamClient#getCanShare()
+        */
+       @Column(name = "can_share", nullable = false)
+       private boolean canShare = false;
+
+       /**
+        * @see StreamClient#getCanRemote()
+        */
+       @Column(name = "can_remote", nullable = false)
+       private boolean canRemote = false;
+
+       /**
+        * @see StreamClient#getCanGiveAudio()
+        */
+       @Column(name = "can_giveaudio", nullable = false)
+       private boolean canGiveAudio = false;
+
+       @Column(name = "can_video", nullable = false)
+       private boolean canVideo = false;
+
+       /**
+        * @see StreamClient#getConnectedSince()
+        */
+       @Column(name = "connected_since")
+       private Date connectedSince;
+
+       /**
+        * @see StreamClient#getFormatedDate()
+        */
+       @Column(name = "formated_date")
+       private String formatedDate;
+
+       /**
+        * @see StreamClient#isScreenClient()
+        */
+       @Column(name = "is_screenclient", nullable = false)
+       private boolean screenClient;
+
+       /**
+        * @see StreamClient#getUsercolor()
+        */
+       @Column(name = "usercolor")
+       private String usercolor;
+
+       /**
+        * @see StreamClient#getUserpos()
+        */
+       @Column(name = "userpos")
+       private Integer userpos;
+
+       /**
+        * @see StreamClient#getUserip()
+        */
+       @Column(name = "userip")
+       private String userip;
+
+       /**
+        * @see StreamClient#getUserport()
+        */
+       @Column(name = "userport")
+       private int userport;
+
+       /**
+        * @see StreamClient#getRoomId()
+        */
+       @Column(name = "room_id")
+       private Long roomId;
+
+       /**
+        * @see StreamClient#getRoomEnter()
+        */
+       @Column(name = "room_enter")
+       private Date roomEnter = null;
+
+       /**
+        * @see StreamClient#getBroadCastID()
+        */
+       @Column(name = "broadcast_id")
+       private long broadCastID = -2;
+
+       /**
+        * @see StreamClient#getUserId()
+        */
+       @Column(name = "user_id")
+       private Long userId = null;
+
+       /**
+        * @see StreamClient#getFirstname()
+        */
+       @Column(name = "firstname")
+       private String firstname = "";
+
+       /**
+        * @see StreamClient#getLastname()
+        */
+       @Column(name = "lastname")
+       private String lastname = "";
+
+       /**
+        * @see StreamClient#getMail()
+        */
+       @Column(name = "email")
+       private String email;
+
+       /**
+        * @see StreamClient#getLastLogin()
+        */
+       @Column(name = "last_login")
+       private String lastLogin;
+
+       /**
+        * @see StreamClient#getSecurityCode()
+        */
+       @Column(name = "security_code")
+       private String securityCode;
+
+       /**
+        * @see StreamClient#getPicture_uri()
+        */
+       @Column(name = "picture_uri")
+       private String picture_uri;
+
+       /**
+        * @see StreamClient#getLanguage()
+        */
+       @Column(name = "language")
+       private String language = "";
+
+       /**
+        * @see StreamClient#getAvsettings()
+        */
+       @Column(name = "avsettings")
+       private String avsettings = "";
+
+       /**
+        * @see StreamClient#getSwfurl()
+        */
+       // FIXME: Move to {@link ClientSession}
+       @Column(name = "swfurl", length=2048)
+       private String swfurl;
+
+       @Column(name = "tcurl", length=2048)
+       private String tcUrl;
+
+       @Column(name = "nativeSsl", nullable = false)
+       private boolean nativeSsl = false;
+
+       /**
+        * @see StreamClient#getIsRecording()
+        */
+       @Column(name = "is_recording", nullable = false)
+       private boolean isRecording = false;
+
+       /**
+        * @see StreamClient#getRoomRecordingName()
+        */
+       @Column(name = "room_recording_name")
+       private String roomRecordingName;
+
+       /**
+        * @see StreamClient#getRecordingId()
+        */
+       @Column(name = "recording_id")
+       private Long recordingId;
+
+       /**
+        * @see StreamClient#getRecordingMetaDataId()
+        */
+       @Column(name = "recording_metadata_id")
+       private Long recordingMetaDataId;
+
+       /**
+        * @see StreamClient#isStartRecording()
+        */
+       @Column(name = "start_recording", nullable = false)
+       private boolean startRecording = false;
+
+       /**
+        * @see StreamClient#isStartStreaming()
+        */
+       @Column(name = "start_streaming", nullable = false)
+       private boolean startStreaming = false;
+
+       /**
+        * @see StreamClient#isScreenPublishStarted()
+        */
+       @Column(name = "screen_publish_started", nullable = false)
+       private boolean screenPublishStarted = false;
+
+       /**
+        * @see StreamClient#isStreamPublishStarted()
+        */
+       @Column(name = "stream_publish_started", nullable = false)
+       private boolean streamPublishStarted = false;
+
+       /**
+        * @see StreamClient#getIsBroadcasting()
+        */
+       @Column(name = "is_broadcasting", nullable = false)
+       private boolean isBroadcasting = false;
+
+       /**
+        * @see StreamClient#getExternalUserId()
+        */
+       @Column(name = "external_user_id")
+       private String externalUserId;
+
+       /**
+        * @see StreamClient#getExternalUserType()
+        */
+       @Column(name = "external_user_type")
+       private String externalUserType;
+
+       /**
+        * @see StreamClient#getInterviewPodId()
+        */
+       @Column(name = "interview_pod_id")
+       private Integer interviewPodId = null;
+
+       /**
+        * @see StreamClient#isAllowRecording()
+        */
+       @Column(name = "allow_recording", nullable = false)
+       private boolean allowRecording = true;
+
+       /**
+        * @see StreamClient#getZombieCheckFlag()
+        */
+       @Column(name = "zombie_check_flag", nullable = false)
+       private boolean zombieCheckFlag = false;
+
+       /**
+        * @see StreamClient#getMicMuted()
+        */
+       @Column(name = "mic_muted", nullable = false)
+       private boolean micMuted = false;
+
+       /**
+        * @see StreamClient#isSipTransport()
+        */
+       @Column(name = "sip_transport", nullable = false)
+       private boolean sipTransport = false;
+
+       @Column(name = "mobile", nullable = false)
+       private boolean mobile = false;
+
+       @ManyToOne(fetch = FetchType.LAZY)
+       @JoinColumn(name = "server_id")
+       private Server server;
+
+       public StreamClient() {}
+
+       public StreamClient(String streamid, String publicSID, Long roomId,
+                       Long userId, String firstname, String lastname,
+                       String username, String connectedSince, String scope) {
+               super();
+               this.streamid = streamid;
+               this.publicSID = publicSID;
+               this.roomId = roomId;
+               this.userId = userId;
+               this.firstname = firstname;
+               this.lastname = lastname;
+               this.username = username;
+               this.connectedSince = 
CalendarPatterns.parseDateWithHour(connectedSince);
+               this.scope = scope;
+       }
+
+       public void setUserObject(Long userId, String username, String 
firstname, String lastname) {
+               this.userId = userId;
+               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;
+       }
+
+       @Override
+       public Long getId() {
+               return id;
+       }
+
+       @Override
+       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 getSecurityCode() {
+               return securityCode;
+       }
+
+       public void setSecurityCode(String securityCode) {
+               this.securityCode = securityCode;
+       }
+
+       public String getPicture_uri() {
+               return picture_uri;
+       }
+
+       public void setPicture_uri(String picture_uri) {
+               this.picture_uri = picture_uri;
+       }
+
+       public Long getUserId() {
+               return userId;
+       }
+
+       public void setUserId(Long userId) {
+               this.userId = userId;
+       }
+
+       public Long getRoomId() {
+               return roomId;
+       }
+
+       public void setRoomId(Long roomId) {
+               this.roomId = roomId;
+       }
+
+       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 isScreenClient() {
+               return screenClient;
+       }
+
+       public void setScreenClient(boolean screenClient) {
+               this.screenClient = screenClient;
+       }
+
+       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 getRecordingId() {
+               return recordingId;
+       }
+
+       public void setRecordingId(Long recordingId) {
+               this.recordingId = recordingId;
+       }
+
+       public Long getRecordingMetaDataId() {
+               return recordingMetaDataId;
+       }
+
+       public void setRecordingMetaDataId(Long recordingMetaDataId) {
+               this.recordingMetaDataId = recordingMetaDataId;
+       }
+
+       public boolean isScreenPublishStarted() {
+               return screenPublishStarted;
+       }
+
+       public void setScreenPublishStarted(boolean screenPublishStarted) {
+               this.screenPublishStarted = screenPublishStarted;
+       }
+
+       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 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;
+       }
+
+       public String getTcUrl() {
+               return tcUrl;
+       }
+
+       public void setTcUrl(String tcUrl) {
+               this.tcUrl = tcUrl;
+       }
+
+       public boolean isNativeSsl() {
+               return nativeSsl;
+       }
+
+       public void setNativeSsl(boolean nativeSsl) {
+               this.nativeSsl = nativeSsl;
+       }
+
+       @Override
+       public String toString() {
+               return "Client [streamid=" + streamid + ", publicSID=" + 
publicSID + ", isScreenClient=" + screenClient
+                               + ", isMobile = " + mobile + ", roomId=" + 
roomId + ", broadCastID=" + broadCastID + ", userId="
+                               + userId + ", avsettings=" + avsettings + ", 
isRecording=" + isRecording + ", recordingId="
+                               + recordingId + ", recordingMetaDataId=" + 
recordingMetaDataId + ", screenPublishStarted="
+                               + screenPublishStarted + ", interviewPodId=" + 
interviewPodId + ", server=" + server + "]";
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
index 37f8d92..0eeea98 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
@@ -52,7 +52,7 @@ import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.IUserManager;
 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.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.GroupUser;
@@ -420,7 +420,7 @@ public class UserManager implements IUserManager {
 
                                sessionDao.clearSessionByRoomId(room_id);
 
-                               for (Client rcl : 
sessionManager.getClientListByRoom(room_id)) {
+                               for (StreamClient rcl : 
sessionManager.getClientListByRoom(room_id)) {
                                        if (rcl == null) {
                                                return true;
                                        }
@@ -449,7 +449,7 @@ public class UserManager implements IUserManager {
                        Sessiondata sd = sessionDao.check(sid);
                        // admins only
                        if 
(AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) {
-                               Client rcl = 
sessionManager.getClientByPublicSID(publicSID, null);
+                               StreamClient rcl = 
sessionManager.getClientByPublicSID(publicSID, null);
 
                                if (rcl == null) {
                                        return true;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
index b213480..0d8e37d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -30,7 +30,7 @@ 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.basic.IClient;
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.web.admin.AdminPanel;
 import org.apache.openmeetings.web.admin.SearchableDataView;
 import org.apache.openmeetings.web.app.Application;
@@ -89,8 +89,8 @@ public class ConnectionsPanel extends AdminPanel {
                                        @Override
                                        protected void 
onSubmit(AjaxRequestTarget target) {
                                                IClient _c = 
item.getModelObject();
-                                               if (_c instanceof Client) {
-                                                       Client c = (Client)_c;
+                                               if (_c instanceof StreamClient) 
{
+                                                       StreamClient c = 
(StreamClient)_c;
                                                        
getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
                                                                        , 
c.getServer() == null ? 0 : c.getServer().getId());
                                                } else {
@@ -100,8 +100,8 @@ public class ConnectionsPanel extends AdminPanel {
                                                target.add(container, 
details.setVisible(false));
                                        }
                                };
-                               if (_c instanceof Client) {
-                                       Client c = (Client)_c;
+                               if (_c instanceof StreamClient) {
+                                       StreamClient c = (StreamClient)_c;
                                        item.add(new Label("streamid"));
                                        item.add(new Label("login", 
c.getUsername()));
                                        item.add(new Label("since", 
c.getConnectedSince()));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index aa234b5..1d7d12a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -34,7 +34,7 @@ import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.IUserService;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
@@ -82,12 +82,12 @@ public class RoomForm extends AdminBaseForm<Room> {
        private final TextField<String> pin = new TextField<>("pin");
        private final WebMarkupContainer moderatorContainer = new 
WebMarkupContainer("moderatorContainer");
        private final WebMarkupContainer clientsContainer = new 
WebMarkupContainer("clientsContainer");
-       private final ListView<Client> clients = new 
ListView<Client>("clients", new ArrayList<>()) {
+       private final ListView<StreamClient> clients = new 
ListView<StreamClient>("clients", new ArrayList<>()) {
                private static final long serialVersionUID = 1L;
 
                @Override
-               protected void populateItem(final ListItem<Client> item) {
-                       Client client = item.getModelObject();
+               protected void populateItem(final ListItem<StreamClient> item) {
+                       StreamClient client = item.getModelObject();
                        item.add(new Label("clientId", "" + client.getId()))
                                .add(new Label("clientLogin", "" + 
client.getUsername()))
                                .add(new ConfirmableAjaxBorder("clientDelete", 
getString("80"), getString("833")) {
@@ -95,7 +95,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 
                                        @Override
                                        protected void 
onSubmit(AjaxRequestTarget target) {
-                                               Client c = 
item.getModelObject();
+                                               StreamClient c = 
item.getModelObject();
                                                
getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
                                                                , c.getServer() 
== null ? 0 : c.getServer().getId());
 
@@ -329,7 +329,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 
        void updateClients(AjaxRequestTarget target) {
                long roomId = (getModelObject().getId() != null ? 
getModelObject().getId() : 0);
-               final List<Client> clientsInRoom = 
getBean(ISessionManager.class).getClientListByRoom(roomId);
+               final List<StreamClient> clientsInRoom = 
getBean(ISessionManager.class).getClientListByRoom(roomId);
                clients.setDefaultModelObject(clientsInRoom);
                target.add(clientsContainer);
        }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index ac7cfa8..2718c5f 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -56,6 +56,7 @@ import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Invitation;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.util.InitializationContainer;
@@ -257,7 +258,7 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                }
        }
 
-       private static boolean 
hasVideo(org.apache.openmeetings.db.entity.room.Client rcl) {
+       private static boolean hasVideo(StreamClient rcl) {
                return rcl != null && rcl.getAvsettings().contains("v");
        }
 
@@ -266,7 +267,7 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
        }
 
        @Override
-       public org.apache.openmeetings.db.entity.room.Client 
updateClient(org.apache.openmeetings.db.entity.room.Client rcl, boolean 
forceSize) {
+       public StreamClient updateClient(StreamClient rcl, boolean forceSize) {
                if (rcl == null) {
                        return null;
                }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
index 17a0a57..d9e203e 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
@@ -24,7 +24,7 @@ import static 
org.apache.openmeetings.web.app.Application.getBean;
 import org.apache.openmeetings.core.remote.ScopeApplicationAdapter;
 import org.apache.openmeetings.core.session.SessionManager;
 import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.web.app.Application;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -32,13 +32,13 @@ import org.slf4j.Logger;
 public class RoomBroadcaster {
        private static final Logger log = 
Red5LoggerFactory.getLogger(RoomBroadcaster.class, webAppRootKey);
 
-       public static Client getClient(String publicSid) {
+       public static StreamClient getClient(String publicSid) {
                ClientSessionInfo csi = 
getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid);
                return csi == null ? null : csi.getRcl();
        }
 
        public static void broadcast(String publicSid, String method, Object 
obj) {
-               Client rc = getClient(publicSid);
+               StreamClient rc = getClient(publicSid);
                if (rc == null) {
                        return;
                }
@@ -51,7 +51,7 @@ public class RoomBroadcaster {
        }
 
        public static void 
sendUpdatedClient(org.apache.openmeetings.db.entity.basic.Client client) {
-               org.apache.openmeetings.db.entity.room.Client rcl = 
Application.get().updateClient(getClient(client.getUid()), true);
+               StreamClient rcl = 
Application.get().updateClient(getClient(client.getUid()), true);
                log.debug("-----------  sendUpdatedClient ");
 
                if (rcl == null) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 0cf02f3..6341021 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -34,10 +34,11 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.directory.api.util.Strings;
+import org.apache.openmeetings.core.util.RoomHelper;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -78,6 +79,7 @@ import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
@@ -122,7 +124,7 @@ public class RoomPanel extends BasePanel {
                        
target.appendJavaScript(String.format("VideoManager.init(%s);", options));
                        WebSocketHelper.sendRoom(new RoomMessage(r.getId(), 
getUserId(), RoomMessage.Type.roomEnter));
                        // play video from other participants
-                       playVideos(target);
+                       initVideos(target);
                        getMainPanel().getChat().roomEnter(r, target);
                        if (r.isFilesOpened()) {
                                sidebar.setFilesActive(target);
@@ -157,14 +159,21 @@ public class RoomPanel extends BasePanel {
                //private String publishingUser = null;
        }
 
-       private void playVideos(AjaxRequestTarget target) {
-               for (Client c: getRoomClients(getRoom().getId()) ){
+       private void initVideos(AjaxRequestTarget target) {
+               StringBuilder sb = new StringBuilder();
+               for (Client c: getRoomClients(getRoom().getId()) ) {
                        boolean self = getClient().getUid().equals(c.getUid());
-                       if (!self) {
-                               JSONObject json = c.toJson(self).put("sid", 
getSid());
-                               // TODO we should check if client is 
screenShare, see onEvent newStream case.
-                               
target.appendJavaScript(String.format("VideoManager.play(%s);", json));
+                       if (c.hasAnyActivity(Client.Activity.broadcastA, 
Client.Activity.broadcastV)) {
+                               sb.append(String.format("VideoManager.play(%s);"
+                                               , RoomHelper.videoJson(c, self, 
getSid(), getBean(ISessionManager.class), false)));
                        }
+                       if (c.hasActivity(Client.Activity.share)) {
+                               sb.append(String.format("VideoManager.play(%s);"
+                                               , RoomHelper.videoJson(c, self, 
getSid(), getBean(ISessionManager.class), true)));
+                       }
+               }
+               if (!Strings.isEmpty(sb)) {
+                       target.appendJavaScript(sb);
                }
        }
 
@@ -399,15 +408,8 @@ public class RoomPanel extends BasePanel {
                                                Client c = 
getOnlineClient(obj.getString("uid"));
                                                boolean self = 
getClient().getUid().equals(c.getUid());
                                                if (!self) {
-                                                       JSONObject json = 
c.toJson(self).put("sid", getSid());
-                                                       if 
(obj.optBoolean("screenShare", false)) {
-                                                               
json.put("screenShare", true)
-                                                                       
.put("uid", obj.getString("suid")) // unique screen-sharing ID
-                                                                       
.put("broadcastId", obj.getString("broadcastId"))
-                                                                       
.put("width", obj.getInt("width"))
-                                                                       
.put("height", obj.getInt("height"));
-                                                       }
-                                                       
handler.appendJavaScript(String.format("VideoManager.play(%s);", json));
+                                                       
handler.appendJavaScript(String.format("VideoManager.play(%s);"
+                                                                       , 
RoomHelper.videoJson(c, self, getSid(), getBean(ISessionManager.class), 
obj.optBoolean("screenShare", false))));
                                                }
                                        }
                                                break;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index 37d7115..bdb1ea8 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@ -38,6 +38,7 @@ import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.message.RoomMessage.Type;
@@ -300,13 +301,13 @@ public class RoomMenuPanel extends Panel {
                StringBuilder roomTitle = new StringBuilder();
                if (room.getRecordingUser() != null) {
                        ISessionManager sessMngr = 
getBean(ISessionManager.class);
-                       org.apache.openmeetings.db.entity.room.Client recUser = 
sessMngr.getClientByPublicSID(room.getRecordingUser(), null); //TODO check 
server
+                       StreamClient recUser = 
sessMngr.getClientByPublicSID(room.getRecordingUser(), null); //TODO check 
server
                        if (recUser != null) {
                                roomTitle.append(String.format("%s %s %s %s 
%s", getString("419")
                                                , recUser.getUsername(), 
recUser.getFirstname(), recUser.getLastname(), 
df.format(recUser.getConnectedSince())));
                                roomClass.append(" screen");
                        }
-                       org.apache.openmeetings.db.entity.room.Client pubUser = 
sessMngr.getClientByPublicSID(room.getPublishingUser(), null); //TODO check 
server
+                       StreamClient pubUser = 
sessMngr.getClientByPublicSID(room.getPublishingUser(), null); //TODO check 
server
                        if (pubUser != null) {
                                if (recUser != null) {
                                        roomTitle.append('\n');

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index 1b2d687..f9e1087 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@ -31,7 +31,7 @@ var Video = (function() {
                vc.width(w).height(h);
                swf.attr('width', w).attr('height', h);
        }
-       function _init(_box, _c) {
+       function _init(_box, _uid, _c) {
                c = _c;
                box = _box;
                size = {width: c.width, height: c.height};
@@ -95,12 +95,13 @@ var Video = (function() {
                        o.cam = c.cam;
                        o.mic = c.mic;
                        o.mode = 'broadcast';
+                       o.uid = c.uid;
                } else {
                        o.mode = 'play';
+                       o.uid = _uid;
                }
                o.width = c.width;
                o.height = c.height;
-               o.uid = c.uid;
                o.sid = c.sid;
                o.broadcastId = c.broadcastId;
                swf = initVideo(vc, _id + '-swf', o);
@@ -134,7 +135,7 @@ var VideoManager = (function() {
                        , av = audio || video
                        , v = $('#' + _id);
                if (av && v.length != 1 && !!c.self) {
-                       Video().init(box, c);
+                       Video().init(box, options.uid, c);
                } else if (av && v.length == 1) {
                        v.data().update(c);
                } else if (!av && v.length == 1) {
@@ -142,7 +143,7 @@ var VideoManager = (function() {
                }
        }
        function _play(c) {
-               Video().init(box, c);
+               Video().init(box, options.uid, c);
        }
        function _close(uid) {
                var _id = _getVid(uid), v = $('#' + _id);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
index 388277e..6a138b9 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
@@ -46,7 +46,7 @@
                
<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
                <class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
                
<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-               <class>org.apache.openmeetings.db.entity.room.Client</class>
+               
<class>org.apache.openmeetings.db.entity.room.StreamClient</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.RoomGroup</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
index 1d2b86b..4304fe5 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
@@ -46,7 +46,7 @@
                
<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
                <class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
                
<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-               <class>org.apache.openmeetings.db.entity.room.Client</class>
+               
<class>org.apache.openmeetings.db.entity.room.StreamClient</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.RoomGroup</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
index e1124ba..46237d3 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -45,7 +45,7 @@
                
<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
                <class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
                
<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-               <class>org.apache.openmeetings.db.entity.room.Client</class>
+               
<class>org.apache.openmeetings.db.entity.room.StreamClient</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.Whiteboard</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
index 5263a8e..798ec15 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -46,7 +46,7 @@
                
<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
                <class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
                
<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-               <class>org.apache.openmeetings.db.entity.room.Client</class>
+               
<class>org.apache.openmeetings.db.entity.room.StreamClient</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.RoomGroup</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
index 21367c0..2a62983 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
@@ -46,7 +46,7 @@
                
<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
                <class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
                
<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-               <class>org.apache.openmeetings.db.entity.room.Client</class>
+               
<class>org.apache.openmeetings.db.entity.room.StreamClient</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.RoomGroup</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
index baa331f..a93c70d 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
@@ -46,7 +46,7 @@
                
<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
                <class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
                
<class>org.apache.openmeetings.db.entity.room.RoomPollAnswer</class>
-               <class>org.apache.openmeetings.db.entity.room.Client</class>
+               
<class>org.apache.openmeetings.db.entity.room.StreamClient</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.RoomGroup</class>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
index 720a7fc..6963911 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
@@ -24,7 +24,7 @@ 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.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.test.AbstractJUnitDefaults;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -58,7 +58,7 @@ public class TestDbSession extends AbstractJUnitDefaults {
                        serverDao.update(server, null);
                }
 
-               Client cl1 = new Client();
+               StreamClient cl1 = new StreamClient();
                cl1.setStreamid("1");
                cl1.setServer(null);
                cl1.setUserId(1L);
@@ -66,7 +66,7 @@ public class TestDbSession extends AbstractJUnitDefaults {
                cl1.setPublicSID("public1");
                clientDao.add(cl1);
 
-               Client cl2 = new Client();
+               StreamClient cl2 = new StreamClient();
                cl2.setStreamid("2");
                cl2.setServer(null);
                cl2.setRoomId(1L);
@@ -74,7 +74,7 @@ public class TestDbSession extends AbstractJUnitDefaults {
                cl2.setPublicSID("public2");
                clientDao.add(cl2);
 
-               Client cl3 = new Client();
+               StreamClient cl3 = new StreamClient();
                cl3.setStreamid("3");
                cl3.setServer(server);
                cl3.setRoomId(3L);
@@ -82,21 +82,21 @@ public class TestDbSession extends AbstractJUnitDefaults {
                cl3.setPublicSID("public3");
                clientDao.add(cl3);
                
-               Client clTest = clientDao.getClientByServerAndStreamId(null, 
"1");
+               StreamClient clTest = 
clientDao.getClientByServerAndStreamId(null, "1");
 
                log.debug("cl1 " + cl1);
                log.debug("clTest " + clTest);
 
                assertEquals(clTest.getId(), cl1.getId());
 
-               Client clTest3 = clientDao.getClientByServerAndStreamId(server, 
"3");
+               StreamClient 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");
+               StreamClient clTest_NOT_3 = 
clientDao.getClientByServerAndStreamId(null, "3");
 
                log.debug("clTest_NOT_3 " + clTest_NOT_3);
                assertEquals(null, clTest_NOT_3);
@@ -110,51 +110,51 @@ public class TestDbSession extends AbstractJUnitDefaults {
                long numberOfClients4 = 
clientDao.countClientsByServerAndStreamId(null, "3");
                assertEquals(0, numberOfClients4);
                
-               List<Client> clTest_Pub_1_list = 
clientDao.getClientsByPublicSIDAndServer(null, "public1");
+               List<StreamClient> 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");
+               List<StreamClient> 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");
+               List<StreamClient> clTest_Fail_list = 
clientDao.getClientsByPublicSIDAndServer(null, "public3");
                assertEquals(0, clTest_Fail_list.size());
                
-               List<Client> clTest_PubAll_1_list = 
clientDao.getClientsByPublicSID("public1");
+               List<StreamClient> 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");
+               List<StreamClient> 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");
+               List<StreamClient> clTest_FailAll_list = 
clientDao.getClientsByPublicSID("public4");
                assertEquals(0, clTest_FailAll_list.size());
                
-               List<Client> clientsByServerNull = 
clientDao.getClientsByServer(null);
+               List<StreamClient> clientsByServerNull = 
clientDao.getClientsByServer(null);
                assertEquals(2, clientsByServerNull.size());
                
-               List<Client> clientsByServer = 
clientDao.getClientsByServer(server);
+               List<StreamClient> clientsByServer = 
clientDao.getClientsByServer(server);
                assertEquals(1, clientsByServer.size());
                
-               List<Client> clientsAll = clientDao.getClients();
+               List<StreamClient> clientsAll = clientDao.getClients();
                assertEquals(3, clientsAll.size());
                
                //by userid
-               List<Client> clTest_User_1_list = 
clientDao.getClientsByUserId(null, 1L);
+               List<StreamClient> 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);
+               List<StreamClient> 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);
+               List<StreamClient> clTest_UserFail_list = 
clientDao.getClientsByUserId(null, 3L);
                assertEquals(0, clTest_UserFail_list.size());
                
                //by roomid
-               List<Client> clTest_Room_1_list = 
clientDao.getClientsByRoomId(1L);
+               List<StreamClient> clTest_Room_1_list = 
clientDao.getClientsByRoomId(1L);
                assertEquals(2, clTest_Room_1_list.size());
                
-               List<Client> clTest_Room_3_list = 
clientDao.getClientsByRoomId(3L);
+               List<StreamClient> 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);
+               List<StreamClient> clTest_RoomFail_list = 
clientDao.getClientsByRoomId(2L);
                assertEquals(0, clTest_RoomFail_list.size());
                
                //count all

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
index 30a0ec1..946e15c 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
@@ -24,7 +24,7 @@ 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.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.test.AbstractJUnitDefaults;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -58,7 +58,7 @@ public class TestDbSessionGetRoomIds extends 
AbstractJUnitDefaults {
                        serverDao.update(server, null);
                }
 
-               Client cl1 = new Client();
+               StreamClient cl1 = new StreamClient();
                cl1.setStreamid("1");
                cl1.setServer(server);
                cl1.setUserId(1L);
@@ -66,7 +66,7 @@ public class TestDbSessionGetRoomIds extends 
AbstractJUnitDefaults {
                cl1.setPublicSID("public1");
                clientDao.add(cl1);
 
-               Client cl2 = new Client();
+               StreamClient cl2 = new StreamClient();
                cl2.setStreamid("2");
                cl2.setServer(server);
                cl2.setRoomId(1L);
@@ -74,7 +74,7 @@ public class TestDbSessionGetRoomIds extends 
AbstractJUnitDefaults {
                cl2.setPublicSID("public2");
                clientDao.add(cl2);
 
-               Client cl3 = new Client();
+               StreamClient cl3 = new StreamClient();
                cl3.setStreamid("3");
                cl3.setServer(server);
                cl3.setRoomId(3L);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a260f5a8/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
index e3dd291..4a50e47 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
@@ -27,7 +27,7 @@ import java.util.Random;
 
 import org.apache.openmeetings.core.session.store.HashMapStore;
 import org.apache.openmeetings.core.session.store.IClientPersistenceStore;
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.test.AbstractJUnitDefaults;
 import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.apache.openmeetings.util.crypt.CryptProvider;
@@ -54,7 +54,7 @@ public class TestHashMapSession extends AbstractJUnitDefaults 
{
                        
                        String streamId = ""+i;
                        
-                       Client rcm = new Client();
+                       StreamClient rcm = new StreamClient();
                        rcm.setConnectedSince(new Date());
                        rcm.setStreamid(streamId);
                        rcm.setScope("scopeName");

Reply via email to