diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml
index fa3a5b3f806493e68f7f2a6ae7c192ec08f4e576..cc2d01ccf44932c7dfd2e61b66a66536a114bb9a 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml
@@ -240,10 +240,6 @@
 				slideModel.onZoom(zoomPercentage, mouseX, mouseY);
 				slideModel.printViewedRegion();
 				slideModel.displayPresenterView();
-				LogUtil.debug(slideLoader.x + ": x");
-				LogUtil.debug(slideLoader.y + ": y");
-				LogUtil.debug(slideLoader.width + ": width");
-				LogUtil.debug(slideLoader.height + ": height");
 				fitSlideToLoader();	
 				notifyOthersOfZoomEvent();	
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as
index 5ade7180cdbfb0afc8ac940b95ac418bdfbc9b8b..9411102edb83831599f610ddd63c8a25c16f3f0c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as
@@ -8,6 +8,7 @@ package org.bigbluebutton.modules.whiteboard
 	import flash.events.TextEvent;
 	import flash.geom.Point;
 	import flash.text.TextFieldAutoSize;
+	import flash.ui.Keyboard;
 	
 	import mx.collections.ArrayCollection;
 	
@@ -281,7 +282,9 @@ package org.bigbluebutton.modules.whiteboard
 					break;
 				case TextObject.TEXT_UPDATED:
 				case TextObject.TEXT_PUBLISHED:
-					if(!isPresenter) {
+					if(isPresenter) {
+						if(recvdShapes) addPresenterText(o);
+					} else {
 						if(graphicList.length == 0 || recvdShapes) {
 							addNormalText(o);
 						} else modifyText(o);
@@ -516,9 +519,15 @@ package org.bigbluebutton.modules.whiteboard
 				if(o.getGraphicType() == WhiteboardConstants.TYPE_SHAPE)
 					drawShape(o as DrawObject, true);
 				else if(o.getGraphicType() == WhiteboardConstants.TYPE_TEXT) 
-					drawText(o as TextObject, false);	
+					drawText(o as TextObject, true);	
+			}
+			
+			if(isPresenter) {
+				var evt:GraphicObjectFocusEvent = 
+					new GraphicObjectFocusEvent(GraphicObjectFocusEvent.OBJECT_DESELECTED);
+				evt.data = null;
+				wbCanvas.dispatchEvent(evt);
 			}
-				
 			// if the new page has a grid, draw it
 			addOrRemoveGrid(this.isGrid);
 
@@ -600,13 +609,30 @@ package org.bigbluebutton.modules.whiteboard
 
 			}
 		}
-		
+
 		/* the following four methods  are listeners that handle events that occur
 			on TextObjects, such as text being typed, which causes the textObjTextListener
 			to send text to the server.
 		*/
 		public function textObjSpecialListener(event:KeyboardEvent):void {
 			// check for special conditions
+			switch (event.keyCode) {
+				case Keyboard.D:
+				case Keyboard.W:
+				case Keyboard.LEFT:
+				case Keyboard.UP:
+				case Keyboard.PAGE_UP:				
+				case Keyboard.DOWN:
+				case Keyboard.RIGHT: 
+				case Keyboard.SPACE:
+				case Keyboard.PAGE_DOWN:
+				case Keyboard.ENTER:
+					LogUtil.debug("Capturing text: " + event.keyCode);
+					break; 
+				default:
+					LogUtil.debug("Capturing text: " + event.keyCode);
+			}
+			
 			if(event.charCode == 127 || // 'delete' key
 				event.charCode == 8 || // 'bkspace' key
 				event.charCode == 13) { // 'enter' key
@@ -647,13 +673,16 @@ package org.bigbluebutton.modules.whiteboard
 			var tf:TextObject = event.target as TextObject;	
 			sendTextToServer(TextObject.TEXT_PUBLISHED, tf);	
 			LogUtil.debug("Text published to: " +  tf.text);
-			
+			var e:GraphicObjectFocusEvent = 
+				new GraphicObjectFocusEvent(GraphicObjectFocusEvent.OBJECT_DESELECTED);
+			e.data = tf;
+			wbCanvas.dispatchEvent(e);
 			/* hide text toolbar because we don't want to show it
 			   if there is no text selected */
-			var e:HideTextToolbarEvent = 
-				new HideTextToolbarEvent(HideTextToolbarEvent.HIDE_TEXT_TOOLBAR);
-			wbCanvas.dispatchEvent(e);
-			LogUtil.debug("HIDING TEXT TOOLBAR: " +  tf.text);
+			//var e:HideTextToolbarEvent = 
+			//	new HideTextToolbarEvent(HideTextToolbarEvent.HIDE_TEXT_TOOLBAR);
+			//wbCanvas.dispatchEvent(e);
+			//LogUtil.debug("HIDING TEXT TOOLBAR: " +  tf.text);
 		}
 		
 		private function redrawGraphic(gobj:GraphicObject, objIndex:int):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as
index 7363b23142d1afe9281cb936070924f5671fce42..7b02a6082de5f5075164bb1844136d71f8e9e578 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as
@@ -103,19 +103,19 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
 			var tf:TextFormat = new TextFormat();
 			tf.size = size;
 			tf.font = "arial";
+			this.defaultTextFormat = tf;
 			this.setTextFormat(tf);
 		}
 		
 		public function makeGraphic(parentWidth:Number, parentHeight:Number):void {
 			var startX:Number = denormalize(this.x, parentWidth);
 			var startY:Number = denormalize(this.y, parentHeight);
-			//LogUtil.error("denorms: " + startX + "," + startY);
 			this.x = startX;
 			this.y = startY;
 			this.antiAliasType = AntiAliasType.ADVANCED;
-			//var  format:TextFormat = new TextFormat();
-			//format.color = this.textColor;
-			//format.
+			
+			// ensure typing doesn't go off of whiteboard
+			this.width = 250;
 		}	
 		
 		public function getProperties():Array {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardTextToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardTextToolbar.mxml
index d361311c1a750584ea2d0279ecce36b844a4d88d..25d3b268ce16ad2b574330c929454df7ba4fe353 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardTextToolbar.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardTextToolbar.mxml
@@ -59,6 +59,7 @@
 			import mx.events.MenuEvent;
 			import mx.events.MoveEvent;
 			import mx.events.ResizeEvent;
+			import mx.managers.FocusManager;
 			
 			import org.bigbluebutton.common.Images;
 			import org.bigbluebutton.common.LogUtil;
@@ -86,7 +87,6 @@
 			private var presentationWindow:PresentationWindow;
 			private var normalAlpha:Number = 0.55;
 			private var focusedAlpha:Number = 1.0;
-			
 			public function init():void {
 				this.alpha = normalAlpha;
 				this.visible = true;
@@ -133,6 +133,7 @@
 			
 			// Define the event listener for the Menu control's change event. 
 			private function textSizeMenuClick(event:MenuEvent):void {
+				enableTextToolbar();
 				textSizeMenu.displayPopUp();
 				var newTextSize:Number = Number(event.label);    
 				setTextSize(newTextSize);
@@ -144,6 +145,7 @@
 			 * 
 			 */		
 			protected function setTextColor(e:Event):void{
+				enableTextToolbar();
 				this.textColor = e.target.selectedColor;
 				canvas.modifySelectedTextObject(textColor, backgroundVisible, bgColor, textSize);
 				canvas.stage.focus = currentlySelectedTextObject;
@@ -155,6 +157,7 @@
 			 * 
 			 */		
 			protected function changeTextBackgroundColor(e:Event):void{
+				enableTextToolbar();
 				this.bgColor = e.target.selectedColor;
 				canvas.modifySelectedTextObject(textColor, backgroundVisible, bgColor, textSize);
 				canvas.stage.focus = currentlySelectedTextObject;
@@ -166,6 +169,7 @@
 			 * 
 			 */			
 			protected function setBackgroundVisible(e:Event):void{
+				enableTextToolbar();
 				this.backgroundVisible = e.target.selected;
 				canvas.modifySelectedTextObject(textColor, backgroundVisible, bgColor, textSize);
 				canvas.stage.focus = currentlySelectedTextObject;
@@ -177,6 +181,7 @@
 			 * 
 			 */			
 			protected function setTextSize(size:Number):void {
+				enableTextToolbar();
 				this.textSize = size;
 				LogUtil.debug("Text size set to: " + size);
 				textSizeMenu.label = String(this.textSize);
@@ -199,6 +204,10 @@
 				this.visible = false;
 			}
 			
+			private function closeToolbar(e:StopWhiteboardModuleEvent):void{
+				parent.removeChild(this);
+			}
+			
 			private function handleHideTextToolbarEvent(e:HideTextToolbarEvent):void{
 				LogUtil.debug("hiding toolbar by hidetexttoolbarevent");
 				this.disableTextToolbar();
@@ -246,35 +255,53 @@
 				parent.setChildIndex(this, parent.numChildren-1);
 			}
 			
-			private function closeToolbar(e:StopWhiteboardModuleEvent):void{
-				parent.removeChild(this);
+			// repositions the toolbar when canvas is zoomed			
+			public function adjustForZoom(x:Number, y:Number):void {
+				if(currentlySelectedTextObject == null) return;
+				repositionToolbar(currentlySelectedTextObject);
 			}
-			
+
 			private function handleObjSelected(event:GraphicObjectFocusEvent):void  {
 				if(event.data.getGraphicType() != WhiteboardConstants.TYPE_TEXT) return;
 				var tobj:TextObject = event.data as TextObject;
 				repositionToolbar(tobj);
 				syncPropsWith(tobj);
-				/*if(!this.visible)
+				if(!this.visible)
 					enableTextToolbar();
-				if(!this.enabled)
-					this.enabled = true;*/
 				LogUtil.debug("!!!!SELECTED:" + " " + tobj.getProperties());
 			}
 
 			private function handleObjDeselected(event:GraphicObjectFocusEvent):void  {
 				if(event.data.getGraphicType() != WhiteboardConstants.TYPE_TEXT) return;
 				var tobj:TextObject = event.data as TextObject;
-				disableTextToolbar();
-				textSizeMenu.close();
+				
+				/* checks if the new focus of the stage is not the TextToolbar, and if not,
+					hide the text toolbar. This is to prevent the TextToolbar from disappearing as
+					soon as the user changes focus.
+				*/
+				if(!containsFocus(this)) {
+					disableTextToolbar();
+					textSizeMenu.close();
+				} 
 				LogUtil.debug("!!!!DESELECTED:" + " " + tobj.getProperties());
 			}
-
-			// repositions the toolbar when canvas is zoomed
-			public function adjustForZoom(x:Number, y:Number):void {
-				if(currentlySelectedTextObject == null) return;
-				repositionToolbar(currentlySelectedTextObject);
+			
+			/* used to check whether or not the TextToolbar and its children have focus when
+				checking whether or not it should be made visible=false. see handleObjDeselected().
+			*/
+			private function containsFocus(obj:DisplayObjectContainer):Boolean {
+				if(obj.stage.focus == obj) return true;
+				
+				for (var i:int = 0; i < obj.numChildren; i++) {
+					var currObj:DisplayObject = obj.getChildAt(i);
+					if(obj.stage.focus == currObj) return true;
+				}
+				
+				return false;
 			}
+
+			
+			
 		]]>
 	</mx:Script>
 	
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml
index be27b59c734604b4bc850dbbeb3b32561e042af3..32307aeddca1c019695c7ae781520921051d8ac2 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardToolbar.mxml
@@ -115,11 +115,13 @@
 			 * 
 			 */		
 			protected function setTool(gType:String, toolType:String):void{
-				if(toolType != TextObject.TEXT_TOOL) {
-					var e:HideTextToolbarEvent = 
-						new HideTextToolbarEvent(HideTextToolbarEvent.HIDE_TEXT_TOOLBAR);
+				/*if(toolType != TextObject.TEXT_TOOL) {
+					
+					var e:GraphicObjectFocusEvent = 
+						new GraphicObjectFocusEvent(GraphicObjectFocusEvent.OBJECT_DESELECTED);
 					canvas.dispatchEvent(e);
-				}
+					LogUtil.debug("Should dispatch object deselected method");
+				}*/
 				if(gType == WhiteboardConstants.TYPE_SHAPE) {
 					canvas.setGraphicType(gType);
 					canvas.setTool(toolType);