diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala
index 19246b750d086d1046ef60d008744befd6431a3c..0770d5a7c00a6005ba047089c8727ee99686352b 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala
@@ -171,6 +171,8 @@ class MeetingActor(val mProps: MeetingProperties, val outGW: MessageOutGateway)
       handleRespondToPollRequest(msg)
     case msg: GetPollRequest =>
       handleGetPollRequest(msg)
+    case msg: GetCurrentPollRequest =>
+      handleGetCurrentPollRequest(msg)
 
     case msg: EndMeeting => handleEndMeeting(msg)
     case StopMeetingActor => //exit
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala
index f8db8cf13bf4e2094e4d275e98bb31aa9fd17612..cd33971a88d46c2f07e8af59e42f4a56ce55222e 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala
@@ -84,6 +84,7 @@ case class ShowPollResultRequest(meetingID: String, requesterId: String, pollId:
 case class HidePollResultRequest(meetingID: String, requesterId: String, pollId: String) extends InMessage
 case class RespondToPollRequest(meetingID: String, requesterId: String, pollId: String, questionId: Int, answerId: Int) extends InMessage
 case class GetPollRequest(meetingID: String, requesterId: String, pollId: String) extends InMessage
+case class GetCurrentPollRequest(meetingID: String, requesterId: String) extends InMessage
 
 // Voice
 case class InitAudioSettings(meetingID: String, requesterID: String, muted: Boolean) extends InMessage
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala
index 500246c8b596ec8e29e859d58b053c371b435e49..16b79a65e9176c21405151f2b812ffd4a4682a81 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala
@@ -115,6 +115,9 @@ case class PollShowResultMessage(meetingID: String, recorded: Boolean, requester
 case class ShowPollResultReplyMessage(meetingID: String, recorded: Boolean, result: RequestResult, requesterId: String, pollId: String) extends IOutMessage
 case class PollHideResultMessage(meetingID: String, recorded: Boolean, requesterId: String, pollId: String, poll: PollVO) extends IOutMessage
 case class HidePollResultReplyMessage(meetingID: String, recorded: Boolean, result: RequestResult, requesterId: String, pollId: String) extends IOutMessage
+case class UserRespondedToPollMessage(meetingID: String, recorded: Boolean, requesterId: String, pollId: String, poll: PollVO) extends IOutMessage
+case class RespondToPollReplyMessage(meetingID: String, recorded: Boolean, result: RequestResult, requesterId: String, pollId: String) extends IOutMessage
+case class GetCurrentPollReplyMessage(meetingID: String, recorded: Boolean, requesterId: String, hasPoll: Boolean, poll: Option[PollVO]) extends IOutMessage
 
 // Whiteboard
 case class GetWhiteboardShapesReply(meetingID: String, recorded: Boolean, requesterID: String, whiteboardId: String, shapes: Array[AnnotationVO], replyTo: String) extends IOutMessage
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollApp.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollApp.scala
index 79e525744f1c1b1bdce4e8e431a60e77ba449aea..c8d7da311d2f71e0c111f3a6cb9d3838ac1db831 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollApp.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollApp.scala
@@ -14,15 +14,29 @@ trait PollApp {
 
   }
 
+  def handleGetCurrentPollRequest(msg: GetCurrentPollRequest) {
+    pollModel.getCurrentPoll() match {
+      case Some(p) => {
+        if (p.started && p.stopped && p.showResult) {
+          outGW.send(new GetCurrentPollReplyMessage(mProps.meetingID, mProps.recorded, msg.requesterId, true, Some(p)))
+        } else {
+          outGW.send(new GetCurrentPollReplyMessage(mProps.meetingID, mProps.recorded, msg.requesterId, false, None))
+        }
+      }
+      case None => {
+        outGW.send(new GetCurrentPollReplyMessage(mProps.meetingID, mProps.recorded, msg.requesterId, false, None))
+      }
+    }
+  }
+
   def handleRespondToPollRequest(msg: RespondToPollRequest) {
     pollModel.getPoll(msg.pollId) match {
       case Some(poll) => {
-        poll.hideResult()
-        outGW.send(new PollHideResultMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll.toPollVO()))
+        handleRespondToPoll(poll, msg)
       }
       case None => {
         val result = new RequestResult(StatusCodes.NOT_FOUND, Some(Array(ErrorCodes.RESOURCE_NOT_FOUND)))
-        sender ! new HidePollResultReplyMessage(mProps.meetingID, mProps.recorded, result, msg.requesterId, msg.pollId)
+        sender ! new RespondToPollReplyMessage(mProps.meetingID, mProps.recorded, result, msg.requesterId, msg.pollId)
       }
     }
   }
@@ -30,8 +44,8 @@ trait PollApp {
   def handleHidePollResultRequest(msg: HidePollResultRequest) {
     pollModel.getPoll(msg.pollId) match {
       case Some(poll) => {
-        poll.hideResult()
-        outGW.send(new PollHideResultMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll.toPollVO()))
+        pollModel.hidePollResult(msg.pollId)
+        outGW.send(new PollHideResultMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll))
       }
       case None => {
         val result = new RequestResult(StatusCodes.NOT_FOUND, Some(Array(ErrorCodes.RESOURCE_NOT_FOUND)))
@@ -43,8 +57,8 @@ trait PollApp {
   def handleShowPollResultRequest(msg: ShowPollResultRequest) {
     pollModel.getPoll(msg.pollId) match {
       case Some(poll) => {
-        poll.showResult()
-        outGW.send(new PollShowResultMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll.toPollVO()))
+        pollModel.showPollResult(poll.id)
+        outGW.send(new PollShowResultMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll))
       }
       case None => {
         val result = new RequestResult(StatusCodes.NOT_FOUND, Some(Array(ErrorCodes.RESOURCE_NOT_FOUND)))
@@ -56,7 +70,7 @@ trait PollApp {
   def handleStopPollRequest(msg: StopPollRequest) {
     pollModel.getPoll(msg.pollId) match {
       case Some(poll) => {
-        poll.stop()
+        pollModel.stopPoll(poll.id)
         outGW.send(new PollStoppedMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId))
       }
       case None => {
@@ -69,8 +83,8 @@ trait PollApp {
   def handleStartPollRequest(msg: StartPollRequest) {
     pollModel.getPoll(msg.pollId) match {
       case Some(poll) => {
-        poll.start()
-        outGW.send(new PollStartedMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll.toPollVO()))
+        pollModel.startPoll(poll.id)
+        outGW.send(new PollStartedMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll))
       }
       case None => {
         val result = new RequestResult(StatusCodes.NOT_FOUND, Some(Array(ErrorCodes.RESOURCE_NOT_FOUND)))
@@ -93,105 +107,19 @@ trait PollApp {
 
   }
 
-  private def handleRespondToPoll(poll: Poll, msg: RespondToPollRequest) {
+  private def handleRespondToPoll(poll: PollVO, msg: RespondToPollRequest) {
     if (hasUser(msg.requesterId)) {
       getUser(msg.requesterId) match {
         case Some(user) => {
           val responder = new Responder(user.userID, user.name)
-          poll.respondToQuestion(msg.questionId, msg.answerId, responder)
-
+          pollModel.respondToQuestion(poll.id, msg.questionId, msg.answerId, responder)
+          outGW.send(new UserRespondedToPollMessage(mProps.meetingID, mProps.recorded, msg.requesterId, msg.pollId, poll))
+        }
+        case None => {
+          val result = new RequestResult(StatusCodes.FORBIDDEN, Some(Array(ErrorCodes.RESOURCE_NOT_FOUND)))
+          sender ! new RespondToPollReplyMessage(mProps.meetingID, mProps.recorded, result, msg.requesterId, msg.pollId)
         }
-        case None => //do nothing
       }
     }
   }
-
-  /*  
-  def handleHidePollResult(msg: HidePollResult) {
-    val pollID = msg.pollID
-
-    if (pollModel.hasPoll(pollID)) {
-      pollModel.hidePollResult(pollID)
-      outGW.send(new PollHideResultOutMsg(meetingID, recorded, pollID))
-    }
-  }
-
-  def handleShowPollResult(msg: ShowPollResult) {
-    val pollID = msg.pollID
-
-    if (pollModel.hasPoll(pollID)) {
-      pollModel.showPollResult(pollID)
-      outGW.send(new PollShowResultOutMsg(meetingID, recorded, pollID))
-    }
-  }
-
-
-
-  def handleGetPolls(msg: GetPolls) {
-    var polls = pollModel.getPolls
-    outGW.send(new GetPollsReplyOutMsg(meetingID, recorded, msg.requesterID, polls))
-  }
-
-  def handleClearPoll(msg: ClearPoll) {
-    if (pollModel.clearPoll(msg.pollID)) {
-      outGW.send(new PollClearedOutMsg(meetingID, recorded, msg.pollID))
-    } else {
-      print("PollApp:: handleClearPoll - " + msg.pollID + " not found")
-    }
-  }
-
-  def handleStartPoll(msg: StartPoll) {
-    if (pollModel.hasPoll(msg.pollID)) {
-      pollModel.startPoll(msg.pollID)
-      outGW.send(new PollStartedOutMsg(meetingID, recorded, msg.pollID))
-    } else {
-      print("PollApp:: handleStartPoll - " + msg.pollID + " not found")
-    }
-  }
-
-  def handleStopPoll(msg: StopPoll) {
-    if (pollModel.hasPoll(msg.pollID)) {
-      pollModel.stopPoll(msg.pollID)
-      outGW.send(new PollStoppedOutMsg(meetingID, recorded, msg.pollID))
-    } else {
-      print("PollApp:: handleStopPoll - " + msg.pollID + " not found")
-    }
-  }
-
-  def handleSharePoll(msg: SharePoll) {
-
-  }
-
-  def handleRemovePoll(msg: RemovePoll) {
-    if (pollModel.hasPoll(msg.pollID)) {
-      pollModel.removePoll(msg.pollID)
-      outGW.send(new PollRemovedOutMsg(meetingID, recorded, msg.pollID))
-    } else {
-      print("PollApp:: handleRemovePoll - " + msg.pollID + " not found")
-    }
-  }
-
-  def handleDestroyPoll(msg: DestroyPoll) {
-
-  }
-
-  def handleUpdatePoll(msg: UpdatePoll) {
-    if (pollModel.updatePoll(msg.poll)) {
-      outGW.send(new PollUpdatedOutMsg(meetingID, recorded, msg.poll.id, msg.poll))
-    } else {
-      print("PollApp:: handleUpdatePoll - " + msg.poll.id + " not found")
-    }
-  }
-
-  def handlePreCreatedPoll(msg: PreCreatedPoll) {
-    pollModel.createPoll(msg.poll)
-    outGW.send(new PollCreatedOutMsg(meetingID, recorded, msg.poll.id, msg.poll))
-  }
-
-  def handleCreatePoll(msg: CreatePoll) {
-    pollModel.createPoll(msg.poll)
-    outGW.send(new PollCreatedOutMsg(meetingID, recorded, msg.poll.id, msg.poll))
-  }
-  
-  */
 }
\ No newline at end of file
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollModel.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollModel.scala
index 36635571b2e32795f1e54bfce2a864ba741770a8..7e2c2c0f0a6e37d23184f4f65682bbb26f4ae85b 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollModel.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PollModel.scala
@@ -7,6 +7,8 @@ class PollModel {
 
   private val polls = new HashMap[String, Poll]()
 
+  private var currentPoll: Option[PollVO] = None
+
   /**
    * *
    * Uncomment to create sample polls for manual testing purposes
@@ -21,47 +23,12 @@ class PollModel {
     polls += poll.id -> poll
   }
 
-  def createPoll(pollVO: PollVO) {
-    val questions = new ArrayBuffer[Question]
-    /*   
-    pollVO.questions.foreach(qv => {
-      val responses = new ArrayBuffer[Answer]
-      qv.responses.foreach(rv => {
-        val response = new Answer(rv.id, rv.text)
-        responses += response
-      })
-      questions += new Question(qv.id, qv.multiResponse, qv.question, responses.toArray)
-    })
-
-    val poll = new Poll(pollVO.id, pollVO.title, questions.toArray)
-    polls += poll.id -> poll
-   
-    */
+  def hasCurrentPoll(): Boolean = {
+    currentPoll != None
   }
 
-  def updatePoll(pollVO: PollVO): Boolean = {
-    var success = false
-    /*
-    polls.get(pollVO.id) match {
-      case Some(p) => {
-        val questions = new ArrayBuffer[Question]
-        pollVO.questions.foreach(qv => {
-          val responses = new ArrayBuffer[Response]
-          qv.responses.foreach(rv => {
-            val response = new Response(rv.id, rv.text)
-            responses += response
-          })
-          questions += new Question(qv.id, qv.multiResponse, qv.question, responses.toArray)
-        })
-
-        val poll = new Poll(pollVO.id, pollVO.title, questions.toArray)
-        polls += poll.id -> poll
-        success = true
-      }
-      case None => success = false
-    }
-*/
-    success
+  def getCurrentPoll(): Option[PollVO] = {
+    currentPoll
   }
 
   def getPolls(): Array[PollVO] = {
@@ -86,17 +53,12 @@ class PollModel {
     success
   }
 
-  def startPoll(pollId: String): Boolean = {
-    var success = false
-    polls.get(pollId) match {
-      case Some(p) => {
-        p.start
-        success = true
-      }
-      case None => success = false
+  def startPoll(pollId: String) {
+    polls.get(pollId) foreach {
+      p =>
+        p.start()
+        currentPoll = Some(p.toPollVO())
     }
-
-    success
   }
 
   def removePoll(pollID: String): Boolean = {
@@ -112,51 +74,38 @@ class PollModel {
     success
   }
 
-  def stopPoll(pollID: String): Boolean = {
-    var success = false
-    polls.get(pollID) match {
-      case Some(p) => {
-        p.stop
-        success = true
-      }
-      case None => success = false
-    }
-
-    success
+  def stopPoll(pollId: String) {
+    polls.get(pollId) foreach (p => p.stop())
   }
 
-  def hasPoll(pollID: String): Boolean = {
-    var present = false
-    polls.get(pollID) match {
-      case Some(p) => {
-        present = true
-      }
-      case None => present = false
-    }
-
-    present
+  def hasPoll(pollId: String): Boolean = {
+    polls.get(pollId) != None
   }
 
-  def getPoll(pollId: String): Option[Poll] = {
-    polls.get(pollId)
+  def getPoll(pollId: String): Option[PollVO] = {
+    var pvo: Option[PollVO] = None
+    polls.get(pollId) foreach (p => pvo = Some(p.toPollVO()))
+    pvo
   }
 
-  def hidePollResult(pollID: String) {
-    polls.get(pollID) match {
-      case Some(p) => p.hideResult
-      case None => // do nothing
+  def hidePollResult(pollId: String) {
+    polls.get(pollId) foreach {
+      p =>
+        p.hideResult()
+        currentPoll = None
     }
   }
 
-  def showPollResult(pollID: String) {
-    polls.get(pollID) match {
-      case Some(p) => p.showResult
-      case None => // do nothing
+  def showPollResult(pollId: String) {
+    polls.get(pollId) foreach {
+      p =>
+        p.showResult
+        currentPoll = Some(p.toPollVO())
     }
   }
 
-  def respondToQuestion(pollID: String, questionID: Int, responseID: Int, responder: Responder) {
-    polls.get(pollID) match {
+  def respondToQuestion(pollId: String, questionID: Int, responseID: Int, responder: Responder) {
+    polls.get(pollId) match {
       case Some(p) => {
         p.respondToQuestion(questionID, responseID, responder)
       }