diff --git a/bigbluebutton-html5/imports/locales/en.json b/bigbluebutton-html5/imports/locales/en.json
index 60ebcd92cb7bcae24acfb17e22cc6f8fb8f5ab96..79e379cfa176ff9fcdeae311bdd17d508f2a0893 100755
--- a/bigbluebutton-html5/imports/locales/en.json
+++ b/bigbluebutton-html5/imports/locales/en.json
@@ -13,18 +13,18 @@
   "app.chat.partnerDisconnected": "{name} has left the meeting",
   "app.chat.moreMessages": "More messages below",
   "app.kickMessage": "You have been kicked out of the meeting",
-  "app.whiteboard.slideControls.prevSlideLabel": "Previous slide",
-  "app.whiteboard.slideControls.prevSlideDescrip": "Change the presentation to the previous slide",
-  "app.whiteboard.slideControls.nextSlideLabel": "Next slide",
-  "app.whiteboard.slideControls.nextSlideDescrip": "Change the presentation to the next slide",
-  "app.whiteboard.slideControls.skipSlideLabel": "Skip slide",
-  "app.whiteboard.slideControls.skipSlideDescrip": "Change the presentation to a specific slide",
-  "app.whiteboard.slideControls.fitWidthLabel": "Fit to width",
-  "app.whiteboard.slideControls.fitWidthDescrip": "Display the whole width of the slide",
-  "app.whiteboard.slideControls.fitScreenLabel": "Fit to screen",
-  "app.whiteboard.slideControls.fitScreenDescrip": "Display the whole slide",
-  "app.whiteboard.slideControls.zoomLabel": "Zoom",
-  "app.whiteboard.slideControls.zoomDescrip": "Change the zoom level of the presentation",
+  "app.presentation.presentationToolbar.prevSlideLabel": "Previous slide",
+  "app.presentation.presentationToolbar.prevSlideDescrip": "Change the presentation to the previous slide",
+  "app.presentation.presentationToolbar.nextSlideLabel": "Next slide",
+  "app.presentation.presentationToolbar.nextSlideDescrip": "Change the presentation to the next slide",
+  "app.presentation.presentationToolbar.skipSlideLabel": "Skip slide",
+  "app.presentation.presentationToolbar.skipSlideDescrip": "Change the presentation to a specific slide",
+  "app.presentation.presentationToolbar.fitWidthLabel": "Fit to width",
+  "app.presentation.presentationToolbar.fitWidthDescrip": "Display the whole width of the slide",
+  "app.presentation.presentationToolbar.fitScreenLabel": "Fit to screen",
+  "app.presentation.presentationToolbar.fitScreenDescrip": "Display the whole slide",
+  "app.presentation.presentationToolbar.zoomLabel": "Zoom",
+  "app.presentation.presentationToolbar.zoomDescrip": "Change the zoom level of the presentation",
   "app.failedMessage": "Apologies, trouble connecting to the server.",
   "app.connectingMessage": "Connecting...",
   "app.waitingMessage": "Disconnected. Trying to reconnect in {seconds} seconds...",
@@ -109,8 +109,5 @@
   "app.audio.audioSettings.speakerSourceLabel": "Speaker source",
   "app.audio.audioSettings.microphoneStreamLabel": "Your audio stream volume",
   "app.audio.listenOnly.backLabel": "Back",
-  "app.audio.listenOnly.closeLabel": "Close",
-  "app.presenterControls.previousSlideLabel": "Previous Slide",
-  "app.presenterControls.nextSlideLabel": "Next Slide"
-
+  "app.audio.listenOnly.closeLabel": "Close"
 }
diff --git a/bigbluebutton-html5/imports/ui/components/media/container.jsx b/bigbluebutton-html5/imports/ui/components/media/container.jsx
index 1b601a5fff773eaf50f9637e399d4ab42ff676fc..ff54d536f3b96858c9e8533f67ae77d83b60c0a7 100755
--- a/bigbluebutton-html5/imports/ui/components/media/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/media/container.jsx
@@ -3,13 +3,13 @@ import { createContainer } from 'meteor/react-meteor-data';
 import Media from './component';
 import MediaService from './service';
 import Button from '../button/component';
-import WhiteboardContainer from '../whiteboard/container';
+import PresentationAreaContainer from '../presentation/container';
 import VideoDockContainer from '../video-dock/container';
-import DefaultContent from '../whiteboard/default-content/component';
+import DefaultContent from '../presentation/default-content/component';
 
 const defaultProps = {
   overlay: null, //<VideoDockContainer/>,
-  content: <WhiteboardContainer/>,
+  content: <PresentationAreaContainer/>,
   defaultContent: <DefaultContent />,
 };
 
diff --git a/bigbluebutton-html5/imports/ui/components/polling/component.jsx b/bigbluebutton-html5/imports/ui/components/polling/component.jsx
index 606ecd432b49bcf0e65d0361bfa9016e539cb9d2..210f03cf1561c11c66acba94831847b91137d4cd 100755
--- a/bigbluebutton-html5/imports/ui/components/polling/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/polling/component.jsx
@@ -31,13 +31,16 @@ export default class PollingComponent extends React.Component {
           </p>
         </div>
         {poll.answers.map((pollAnswer, index) =>
-          <div style={calculatedStyles} className={styles.pollButtonWrapper}>
+          <div
+            key={index}
+            style={calculatedStyles}
+            className={styles.pollButtonWrapper}
+          >
             <Button
               className={styles.pollingButton}
               label={pollAnswer.key}
               size="lg"
               color="primary"
-              key={index}
               onClick={() => this.props.handleVote(poll.pollId, pollAnswer)}
               aria-labelledby={`pollAnswerLabel${pollAnswer.key}`}
               aria-describedby={`pollAnswerDesc${pollAnswer.key}`}
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/component.jsx
similarity index 72%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/component.jsx
rename to bigbluebutton-html5/imports/ui/components/presentation/component.jsx
index bde2509d8974d9588ab856ac988e3b20953390b4..3a0787884d7b1213f2b63ecd885823720da6d31d 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/component.jsx
@@ -1,19 +1,18 @@
 import React, { PropTypes } from 'react';
-import WhiteboardShapeModel from './shape-factory/component.jsx';
+import ShapeGroupContainer from '../whiteboard/shape-group/container.jsx';
 import Cursor from './cursor/component.jsx';
-import SlideControlsContainer from './slide-controls/container.jsx'; //I added
-import { createContainer } from 'meteor/react-meteor-data';
+import PresentationToolbarContainer from './presentation-toolbar/container.jsx';
 import Slide from './slide/component.jsx';
 import styles from './styles.scss';
 import ReactCSSTransitionGroup from 'react-addons-css-transition-group';
 import PollingContainer from '/imports/ui/components/polling/container';
 
-export default class Whiteboard extends React.Component {
+export default class PresentationArea extends React.Component {
   constructor(props) {
     super(props);
   }
 
-  renderWhiteboard() {
+  renderPresentationArea() {
     let slideObj = this.props.currentSlide;
 
     if (this.props.currentSlide) {
@@ -54,17 +53,11 @@ export default class Whiteboard extends React.Component {
             </defs>
             <g clipPath="url(#viewBox)">
               <Slide id="slideComponent" currentSlide={this.props.currentSlide}/>
-              {this.props.shapes ? this.props.shapes.map((shape) =>
-                <WhiteboardShapeModel
-                  shape={shape.shape}
-                  key={shape.shape.id}
-                  slideWidth = {slideObj.width}
-                  slideHeight = {slideObj.height}
-                  widthRatio={slideObj.width_ratio}
-                  heightRatio={slideObj.height_ratio}
-                />
-                )
-              : null }
+              <ShapeGroupContainer
+                width = {slideObj.width}
+                height = {slideObj.height}
+                whiteboardId = {slideObj.id}
+              />
               {this.props.cursor ?
                 <Cursor
                 viewBoxWidth={viewBoxWidth}
@@ -85,10 +78,10 @@ export default class Whiteboard extends React.Component {
     }
   }
 
-  renderSlideControlsContainer() {
+  renderPresentationToolbar() {
     if (this.props.currentSlide) {
       return (
-        <SlideControlsContainer
+        <PresentationToolbarContainer
           currentSlideNum={this.props.currentSlide.slide.num}
           presentationId={this.props.currentSlide.presentationId}
         />
@@ -100,20 +93,20 @@ export default class Whiteboard extends React.Component {
 
   render() {
     return (
-      <div className={styles.whiteboardContainer}>
-        <div className={styles.whiteboardWrapper}>
-          <div className={styles.whiteboardPaper}>
-            {this.renderWhiteboard()}
+      <div className={styles.presentationContainer}>
+        <div className={styles.presentationWrapper}>
+          <div className={styles.presentationPaper}>
+            {this.renderPresentationArea()}
           </div>
         </div>
         <PollingContainer />
-        {this.renderSlideControlsContainer()}
+        {this.renderPresentationToolbar()}
       </div>
     );
   }
 }
 
-Whiteboard.defaultProps = {
+PresentationArea.defaultProps = {
   svgProps: {
 
   },
diff --git a/bigbluebutton-html5/imports/ui/components/presentation/container.jsx b/bigbluebutton-html5/imports/ui/components/presentation/container.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..6c1e04b2da6226c3b9e523d280f13df9ac1b1dd3
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/presentation/container.jsx
@@ -0,0 +1,24 @@
+import React, { Component, PropTypes } from 'react';
+import { createContainer } from 'meteor/react-meteor-data';
+import PresentationAreaService from './service';
+import PresentationArea from './component';
+
+class PresentationAreaContainer extends Component {
+  constructor(props) {
+    super(props);
+  }
+
+  render() {
+    return (
+      <PresentationArea {...this.props}>
+        {this.props.children}
+      </PresentationArea>
+    );
+  }
+}
+
+export default createContainer(() => ({
+  currentSlide: PresentationAreaService.getCurrentSlide(),
+  cursor: PresentationAreaService.getCurrentCursor(),
+  userIsPresenter: PresentationAreaService.isPresenter(),
+}), PresentationAreaContainer);
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/cursor/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/cursor/component.jsx
similarity index 95%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/cursor/component.jsx
rename to bigbluebutton-html5/imports/ui/components/presentation/cursor/component.jsx
index 7dff0c75f5093751d6d0ebfcec6d02cbea091e2c..6f843914778affa84afc398299386bb679b2671e 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/cursor/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/cursor/component.jsx
@@ -1,5 +1,4 @@
 import React, { Component, PropTypes } from 'react';
-import WhiteboardService from '/imports/ui/components/whiteboard/service.js';
 
 const propTypes = {
   //Width of the view box
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/default-content/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/default-content/component.jsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/default-content/component.jsx
rename to bigbluebutton-html5/imports/ui/components/presentation/default-content/component.jsx
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/default-content/styles.scss b/bigbluebutton-html5/imports/ui/components/presentation/default-content/styles.scss
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/default-content/styles.scss
rename to bigbluebutton-html5/imports/ui/components/presentation/default-content/styles.scss
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx
similarity index 86%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/component.jsx
rename to bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx
index 2dbdec06bcba96c713737867bbb382a472ec1030..d418b8e583c5646f51c3a0a0fa7b233ced343873 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx
@@ -6,14 +6,14 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 
 const intlMessages = defineMessages({
   previousSlideLabel: {
-    id: 'app.presenterControls.previousSlideLabel',
+    id: 'app.presentation.presentationToolbar.prevSlideLabel',
   },
   nextSlideLabel: {
-    id: 'app.presenterControls.nextSlideLabel',
+    id: 'app.presentation.presentationToolbar.nextSlideLabel',
   },
 });
 
-class SlideControls extends Component {
+class PresentationToolbar extends Component {
   constructor(props) {
     super(props);
 
@@ -61,7 +61,7 @@ class SlideControls extends Component {
     } = this.props;
 
     return (
-      <div id="slideControlsWrapper" className={styles.slideControlsWrapper}>
+      <div id="presentationToolbarWrapper" className={styles.presentationToolbarWrapper}>
         {this.renderAriaLabelsDescs()}
 
         {/*Previous Slide button*/}
@@ -167,14 +167,14 @@ class SlideControls extends Component {
         {/*Previous Slide button aria*/}
         <div id="prevSlideLabel">
           <FormattedMessage
-            id="app.whiteboard.slideControls.prevSlideLabel"
+            id="app.presentation.presentationToolbar.prevSlideLabel"
             description="Aria label for when switching to previous slide"
             defaultMessage="Previous slide"
           />
         </div>
         <div id="prevSlideDescrip">
           <FormattedMessage
-            id="app.whiteboard.slideControls.prevSlideDescrip"
+            id="app.presentation.presentationToolbar.prevSlideDescrip"
             description="Aria description for when switching to previous slide"
             defaultMessage="Change the presentation to the previous slide"
           />
@@ -182,14 +182,14 @@ class SlideControls extends Component {
         {/*Next Slide button aria*/}
         <div id="nextSlideLabel">
           <FormattedMessage
-            id="app.whiteboard.slideControls.nextSlideLabel"
+            id="app.presentation.presentationToolbar.nextSlideLabel"
             description="Aria label for when switching to next slide"
             defaultMessage="Next slide"
           />
         </div>
         <div id="nextSlideDescrip">
           <FormattedMessage
-            id="app.whiteboard.slideControls.nextSlideDescrip"
+            id="app.presentation.presentationToolbar.nextSlideDescrip"
             description="Aria description for when switching to next slide"
             defaultMessage="Change the presentation to the next slide"
           />
@@ -197,14 +197,14 @@ class SlideControls extends Component {
         {/*Skip Slide drop down aria*/}
         <div id="skipSlideLabel">
           <FormattedMessage
-            id="app.whiteboard.slideControls.skipSlideLabel"
+            id="app.presentation.presentationToolbar.skipSlideLabel"
             description="Aria label for when switching to a specific slide"
             defaultMessage="Skip slide"
           />
         </div>
         <div id="skipSlideDescrip">
           <FormattedMessage
-            id="app.whiteboard.slideControls.skipSlideDescrip"
+            id="app.presentation.presentationToolbar.skipSlideDescrip"
             description="Aria description for when switching to a specific slide"
             defaultMessage="Change the presentation to a specific slide"
           />
@@ -212,14 +212,14 @@ class SlideControls extends Component {
         {/*Fit to width button aria*/}
         <div id="fitWidthLabel">
           <FormattedMessage
-            id="app.whiteboard.slideControls.fitWidthLabel"
+            id="app.presentation.presentationToolbar.fitWidthLabel"
             description="Aria description to display the whole width of the slide"
             defaultMessage="Fit to width"
           />
         </div>
         <div id="fitWidthDescrip">
           <FormattedMessage
-            id="app.whiteboard.slideControls.fitWidthDescrip"
+            id="app.presentation.presentationToolbar.fitWidthDescrip"
             description="Aria description to display the whole width of the slide"
             defaultMessage="Display the whole width of the slide"
           />
@@ -227,14 +227,14 @@ class SlideControls extends Component {
         {/*Fit to screen button aria*/}
         <div id="fitScreenLabel">
           <FormattedMessage
-            id="app.whiteboard.slideControls.fitScreenLabel"
+            id="app.presentation.presentationToolbar.fitScreenLabel"
             description="Aria label to display the whole slide"
             defaultMessage="Fit to screen"
           />
         </div>
         <div id="fitScreenDescrip">
           <FormattedMessage
-            id="app.whiteboard.slideControls.fitScreenDescrip"
+            id="app.presentation.presentationToolbar.fitScreenDescrip"
             description="Aria label to display the whole slide"
             defaultMessage="Display the whole slide"
           />
@@ -242,14 +242,14 @@ class SlideControls extends Component {
         {/*Zoom slider aria*/}
         <div id="zoomLabel">
           <FormattedMessage
-            id="app.whiteboard.slideControls.zoomLabel"
+            id="app.presentation.presentationToolbar.zoomLabel"
             description="Aria label to zoom presentation"
             defaultMessage="Zoom"
           />
         </div>
         <div id="zoomDescrip">
           <FormattedMessage
-            id="app.whiteboard.slideControls.zoomDescrip"
+            id="app.presentation.presentationToolbar.zoomDescrip"
             description="Aria label to zoom presentation"
             defaultMessage="Change the zoom level of the presentation"
           />
@@ -259,4 +259,4 @@ class SlideControls extends Component {
   }
 }
 
-export default injectIntl(SlideControls);
+export default injectIntl(PresentationToolbar);
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/container.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/container.jsx
similarity index 68%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/container.jsx
rename to bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/container.jsx
index 43b31645e7e37eff4d588f25a8940b53df014d63..306b1a4194520751b131ee5c948850f38329c94a 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/container.jsx
@@ -1,8 +1,8 @@
 import React, { Component, PropTypes } from 'react';
 import { createContainer } from 'meteor/react-meteor-data';
 
-import SlideControlsService from './service';
-import SlideControls from './component.jsx';
+import PresentationToolbarService from './service';
+import PresentationToolbar from './component.jsx';
 
 const propTypes = {
   // Number of current slide being displayed
@@ -18,7 +18,7 @@ const propTypes = {
   numberOfSlides: PropTypes.number.isRequired,
 };
 
-class SlideControlsContainer extends React.Component {
+class PresentationToolbarContainer extends React.Component {
   constructor(props) {
     super(props);
   }
@@ -35,7 +35,7 @@ class SlideControlsContainer extends React.Component {
     if (userIsPresenter) {
       // Only show controls if user is presenter
       return (
-        <SlideControls
+        <PresentationToolbar
           currentSlideNum={currentSlideNum}
           numberOfSlides={numberOfSlides}
           actions={actions}
@@ -48,7 +48,7 @@ class SlideControlsContainer extends React.Component {
 }
 
 export default createContainer((params) => {
-  const data = SlideControlsService.getSlideData(params);
+  const data = PresentationToolbarService.getSlideData(params);
 
   const {
     userIsPresenter,
@@ -60,13 +60,13 @@ export default createContainer((params) => {
     numberOfSlides,
     actions: {
       nextSlideHandler: () =>
-        SlideControlsService.nextSlide(params.currentSlideNum, numberOfSlides),
+        PresentationToolbarService.nextSlide(params.currentSlideNum, numberOfSlides),
       previousSlideHandler: () =>
-        SlideControlsService.previousSlide(params.currentSlideNum, numberOfSlides),
+        PresentationToolbarService.previousSlide(params.currentSlideNum, numberOfSlides),
       skipToSlideHandler: (event) =>
-        SlideControlsService.skipToSlide(event),
+        PresentationToolbarService.skipToSlide(event),
     },
   };
-}, SlideControlsContainer);
+}, PresentationToolbarContainer);
 
-SlideControlsContainer.propTypes = propTypes;
+PresentationToolbarContainer.propTypes = propTypes;
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/service.js b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/service.js
similarity index 97%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/service.js
rename to bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/service.js
index 56c09c2153d103c44cbbacc3c13eb20301931665..83095e6a49fca5eab80b4d6703c0b08e8f751996 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/service.js
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/service.js
@@ -1,4 +1,3 @@
-import SlideControls from './component.jsx';
 import AuthSingleton from '/imports/ui/services/auth/index.js';
 import Users from '/imports/api/users';
 import Slides from '/imports/api/slides';
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/styles.scss b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss
similarity index 94%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/styles.scss
rename to bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss
index 4beef39e92d7b62f635f195ab1523c0539c61557..3b961be57bbafd6d35dfb39ee9e52e823ddcf535 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/slide-controls/styles.scss
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss
@@ -4,7 +4,7 @@
 $controls-color: #212121 !default;
 $controls-background: #F0F2F6 !default;
 
-.slideControlsWrapper,
+.presentationToolbarWrapper,
 .zoomWrapper {
   order: 2;
   padding: $line-height-computed / 2;
@@ -13,7 +13,7 @@ $controls-background: #F0F2F6 !default;
   align-items: center;
 }
 
-.slideControlsWrapper {
+.presentationToolbarWrapper {
   flex: 1;
   justify-content: center;
   width: 100%;
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/service.js b/bigbluebutton-html5/imports/ui/components/presentation/service.js
similarity index 77%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/service.js
rename to bigbluebutton-html5/imports/ui/components/presentation/service.js
index 3bad32391d5a9ae2f02d9dfc12f80e9c3d81e1d9..48ddef1c12f2092ef30b97031b1d088d8796da77 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/service.js
+++ b/bigbluebutton-html5/imports/ui/components/presentation/service.js
@@ -1,5 +1,4 @@
 import Presentations from '/imports/api/presentations';
-import Shapes from '/imports/api/shapes';
 import Slides from '/imports/api/slides';
 import Cursor from '/imports/api/cursor';
 import Users from '/imports/api/users';
@@ -22,18 +21,6 @@ const getCurrentSlide = () => {
   });
 };
 
-const getCurrentShapes = () => {
-  const currentSlide = getCurrentSlide();
-
-  if (!currentSlide) {
-    return null;
-  }
-
-  return Shapes.find({
-    whiteboardId: currentSlide.slide.id,
-  }).fetch();
-};
-
 const getCurrentCursor = () => Cursor.findOne({});
 
 const isPresenter = () => {
@@ -49,7 +36,6 @@ const isPresenter = () => {
 export default {
   getCurrentPresentation,
   getCurrentSlide,
-  getCurrentShapes,
   getCurrentCursor,
   isPresenter,
 };
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/slide/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/slide/component.jsx
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/slide/component.jsx
rename to bigbluebutton-html5/imports/ui/components/presentation/slide/component.jsx
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/styles.scss b/bigbluebutton-html5/imports/ui/components/presentation/styles.scss
similarity index 89%
rename from bigbluebutton-html5/imports/ui/components/whiteboard/styles.scss
rename to bigbluebutton-html5/imports/ui/components/presentation/styles.scss
index f6befe50140fba2da4e81d3fef8cf9b0122856ba..3ef3a39e985273791b8411e22b86ec011c43a154 100755
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/styles.scss
+++ b/bigbluebutton-html5/imports/ui/components/presentation/styles.scss
@@ -18,7 +18,7 @@
   transition: opacity 400ms ease-in;
 }
 
-.whiteboardPaper {
+.presentationPaper {
   position: absolute;
   display: block;
   width: 100%;
@@ -33,14 +33,14 @@
   max-height: 100%;
 }
 
-.whiteboardContainer {
+.presentationContainer {
   display: flex;
   flex-direction: column;
   height: 100%;
   width: 100%;
 }
 
-.whiteboardWrapper {
+.presentationWrapper {
   order: 1;
   width: 100%;
   height: 100%;
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/container.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/container.jsx
deleted file mode 100755
index 3f26411e353f320913c7f3fcabfaf8bc6e23535d..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/container.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React, { Component, PropTypes } from 'react';
-import { createContainer } from 'meteor/react-meteor-data';
-import WhiteboardService from './service';
-import Whiteboard from './component';
-
-class WhiteboardContainer extends Component {
-  constructor(props) {
-    super(props);
-  }
-
-  render() {
-    return (
-      <Whiteboard {...this.props}>
-        {this.props.children}
-      </Whiteboard>
-    );
-  }
-}
-
-export default createContainer(() => ({
-  currentSlide: WhiteboardService.getCurrentSlide(),
-  shapes: WhiteboardService.getCurrentShapes(),
-  cursor: WhiteboardService.getCurrentCursor(),
-  userIsPresenter: WhiteboardService.isPresenter(),
-}), WhiteboardContainer);
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/component.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/component.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..e9fe7890104dcc30d93029b56225d9921cdff699
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/component.jsx
@@ -0,0 +1,41 @@
+import React, { Component, PropTypes } from 'react';
+import WhiteboardShapeModel from '../shape-factory/component';
+
+const propTypes = {
+  // initial width and height of the slide are required to calculate the coordinates for each shape
+  width: PropTypes.number.isRequired,
+  height: PropTypes.number.isRequired,
+
+  //array of shapes, optional
+  shapes: React.PropTypes.array,
+};
+
+export default class ShapeGroup extends React.Component {
+  constructor(props) {
+    super(props);
+  }
+
+  render() {
+    const {
+      shapes,
+      width,
+      height,
+    } = this.props;
+
+    return (
+      <g>
+        {shapes ? shapes.map((shape) =>
+          <WhiteboardShapeModel
+            shape={shape.shape}
+            key={shape.shape.id}
+            slideWidth = {width}
+            slideHeight = {height}
+          />
+          )
+        : null }
+      </g>
+    );
+  }
+}
+
+ShapeGroup.propTypes = propTypes;
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/container.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/container.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..dc3d226c139e6d5160ed547df23c854647978b68
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/container.jsx
@@ -0,0 +1,46 @@
+import React, { Component, PropTypes } from 'react';
+import { createContainer } from 'meteor/react-meteor-data';
+
+import ShapeGroupService from './service';
+import ShapeGroup from './component';
+
+const propTypes = {
+  // the id is required to fetch the shapes
+  whiteboardId: PropTypes.string.isRequired,
+
+  // initial width and height of the slide are required to calculate the coordinates for each shape
+  width: PropTypes.number.isRequired,
+  height: PropTypes.number.isRequired,
+
+  //array of shapes, optional
+  shapes: React.PropTypes.array,
+};
+
+class ShapeGroupContainer extends React.Component {
+  constructor(props) {
+    super(props);
+  }
+
+  render() {
+    return (
+      <ShapeGroup
+        shapes={this.props.shapes}
+        width={this.props.width}
+        height={this.props.height}
+      />
+    );
+  }
+}
+
+export default createContainer((params) => {
+  const { whiteboardId, width, height } = params;
+  const shapes = ShapeGroupService.getCurrentShapes(whiteboardId);
+
+  return {
+    shapes,
+    width,
+    height,
+  };
+}, ShapeGroupContainer);
+
+ShapeGroupContainer.propTypes = propTypes;
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/service.js b/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/service.js
new file mode 100755
index 0000000000000000000000000000000000000000..bc22b525c6792132060cd370721bdcbbc018de4c
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/shape-group/service.js
@@ -0,0 +1,16 @@
+import Shapes from '/imports/api/shapes';
+
+const getCurrentShapes = (whiteboardId) => {
+
+  if (!whiteboardId) {
+    return null;
+  }
+
+  return Shapes.find({
+    whiteboardId: whiteboardId,
+  }).fetch();
+};
+
+export default {
+  getCurrentShapes,
+};
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-overlay/component.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-overlay/component.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-overlay/component.jsx
@@ -0,0 +1 @@
+
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx
@@ -0,0 +1 @@
+