diff --git a/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx b/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx
index e43db77636d670e1d59c1d8dd0d364d257098eaf..1225fcbedc5488fb85761073fe36213ce4f5e6e2 100644
--- a/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/captions/pad/component.jsx
@@ -6,7 +6,6 @@ import injectWbResizeEvent from '/imports/ui/components/presentation/resize-wrap
 import Button from '/imports/ui/components/button/component';
 import PadService from './service';
 import CaptionsService from '/imports/ui/components/captions/service';
-import logger from '/imports/startup/client/logger';
 import { styles } from './styles';
 
 const intlMessages = defineMessages({
@@ -43,6 +42,7 @@ const intlMessages = defineMessages({
 const propTypes = {
   locale: PropTypes.string.isRequired,
   ownerId: PropTypes.string.isRequired,
+  currentUserId: PropTypes.string.isRequired,
   padId: PropTypes.string.isRequired,
   readOnlyPadId: PropTypes.string.isRequired,
   name: PropTypes.string.isRequired,
@@ -57,6 +57,13 @@ const propTypes = {
 const CAPTIONS_CONFIG = Meteor.settings.public.captions;
 
 class Pad extends Component {
+  static getDerivedStateFromProps(nextProps) {
+    if (nextProps.ownerId !== nextProps.currentUserId) {
+      return ({ listening: false });
+    }
+    return null;
+  }
+
   constructor(props) {
     super(props);
 
@@ -75,28 +82,27 @@ class Pad extends Component {
   shouldComponentUpdate(nextProps, nextState) {
     const {
       text,
-      listening,
     } = this.state;
 
-    const padTextUpdate = nextState.text !== text && nextState.text !== '';
-    const listeningUpdate = nextState.listening !== listening;
+    const noTextUpdate = nextState.text === text && nextState.text !== '';
 
-    if (padTextUpdate || listeningUpdate) {
-      return true;
-    }
-
-    return false;
+    return !noTextUpdate;
   }
 
   componentDidUpdate() {
     const {
       handleAppendText,
+      locale,
     } = this.props;
 
     const {
       text,
     } = this.state;
 
+    if (this.recognition) {
+      this.recognition.lang = locale;
+    }
+
     if (text !== '') {
       handleAppendText(text);
     }
@@ -120,45 +126,47 @@ class Pad extends Component {
       text,
     } = this.state;
 
-    if (listening) this.recognition.start();
-    if (!listening) this.recognition.stop();
+    if (this.recognition) {
+      if (listening) this.recognition.start();
+      if (!listening) this.recognition.stop();
 
-    let finalTranscript = '';
-    this.recognition.onresult = (event) => {
-      const {
-        resultIndex,
-        results,
-      } = event;
+      let finalTranscript = '';
+      this.recognition.onresult = (event) => {
+        const {
+          resultIndex,
+          results,
+        } = event;
 
-      let interimTranscript = '';
+        let interimTranscript = '';
 
-      for (let i = resultIndex; i < results.length; i += 1) {
-        const { transcript } = event.results[i][0];
-        if (results[i].isFinal) finalTranscript += `${transcript} `;
-        else interimTranscript += transcript;
-      }
+        for (let i = resultIndex; i < results.length; i += 1) {
+          const { transcript } = event.results[i][0];
+          if (results[i].isFinal) finalTranscript += `${transcript} `;
+          else interimTranscript += transcript;
+        }
 
-      if (this.itermResultContainer) {
-        this.itermResultContainer.innerHTML = interimTranscript;
-      }
+        if (this.itermResultContainer) {
+          this.itermResultContainer.innerHTML = interimTranscript;
+        }
 
-      if (finalTranscript !== '' && finalTranscript !== text) {
-        const ucfirstLetter = (string) => {
-          const letterIndex = string.charAt(0) === ' ' ? 1 : 0;
-          const formattedString = ` ${string.charAt(letterIndex).toUpperCase() + string.slice(letterIndex + 1)}.`;
-          return formattedString;
-        };
+        if (finalTranscript !== '' && finalTranscript !== text) {
+          const ucfirstLetter = (string) => {
+            const letterIndex = string.charAt(0) === ' ' ? 1 : 0;
+            const formattedString = ` ${string.charAt(letterIndex).toUpperCase() + string.slice(letterIndex + 1)}.`;
+            return formattedString;
+          };
 
-        const formatFinalTranscript = ucfirstLetter(finalTranscript.trimRight());
+          const formatFinalTranscript = ucfirstLetter(finalTranscript.trimRight());
 
-        this.setState({ text: formatFinalTranscript });
-        finalTranscript = '';
-      }
-    };
+          this.setState({ text: formatFinalTranscript });
+          finalTranscript = '';
+        }
+      };
 
-    this.recognition.onerror = (event) => {
-      logger.warning(`Error occurred in recognition: ${event.error}`);
-    };
+      this.recognition.onerror = (event) => {
+        console.log(`Error occurred in recognition: ${event.error}`);
+      };
+    }
   }
 
   render() {
@@ -170,6 +178,7 @@ class Pad extends Component {
       ownerId,
       name,
       amIModerator,
+      currentUserId,
     } = this.props;
 
     if (!amIModerator) {
@@ -179,6 +188,7 @@ class Pad extends Component {
 
     const { listening } = this.state;
     const { enableDictation } = CAPTIONS_CONFIG;
+    const allowDictation = enableDictation && currentUserId === ownerId;
     const url = PadService.getPadURL(padId, readOnlyPadId, ownerId);
 
     return (
@@ -193,7 +203,7 @@ class Pad extends Component {
               className={styles.hideBtn}
             />
           </div>
-          {enableDictation
+          {allowDictation
             ? (
               <span>
                 <Button
diff --git a/bigbluebutton-html5/imports/ui/components/captions/pad/container.jsx b/bigbluebutton-html5/imports/ui/components/captions/pad/container.jsx
index ef30eb2b7e844c18739ad3d331a02cc4954761cc..aefe55059dca830c51b1a5ef4632c48cf6afde56 100644
--- a/bigbluebutton-html5/imports/ui/components/captions/pad/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/captions/pad/container.jsx
@@ -2,8 +2,10 @@ import React, { PureComponent } from 'react';
 import { withTracker } from 'meteor/react-meteor-data';
 import { Session } from 'meteor/session';
 import { makeCall } from '/imports/ui/services/api';
-import Pad from './component';
+import Users from '/imports/api/users';
+import Auth from '/imports/ui/services/auth';
 import CaptionsService from '/imports/ui/components/captions/service';
+import Pad from './component';
 
 class PadContainer extends PureComponent {
   render() {
@@ -42,6 +44,8 @@ export default withTracker(() => {
     return recognition;
   };
 
+  const currentUserId = Users.findOne({ userId: Auth.userID }).userId;
+
   return {
     locale,
     name,
@@ -51,5 +55,6 @@ export default withTracker(() => {
     amIModerator: CaptionsService.amIModerator(),
     handleAppendText,
     initVoiceRecognition,
+    currentUserId,
   };
 })(PadContainer);