diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java
index ff00fb6849b6edb22f2522e36f97370fbf913e74..8e0c30d78b49f39ecbd7bf380de6005bf69f23d4 100755
--- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java
+++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java
@@ -59,8 +59,8 @@ public class GotoSlidePresentationRecordEvent extends
 		eventMap.put("txtUri", txtUri);
 	}
 	
-	public void setPngUri(String pngUri) {
-		eventMap.put("pngUri", pngUri);
+	public void setSvgUri(String svgUri) {
+		eventMap.put("svgUri", svgUri);
 	}
 	
 	public void setXOffset(double offset) {
diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java
index f5be54c5f920a14e886b28f6a7fed93bb600ebbc..295f5bf8a16c4df0e3b52d4eb733103d815227db 100755
--- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java
+++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java
@@ -50,8 +50,8 @@ public class ResizeAndMoveSlidePresentationRecordEvent extends
 		eventMap.put("txtUri", txtUri);
 	}
 	
-	public void setPngUri(String pngUri) {
-		eventMap.put("pngUri", pngUri);
+	public void setSvgUri(String svgUri) {
+		eventMap.put("svgUri", svgUri);
 	}
 	
 	public void setXOffset(double offset) {
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala
index aace43d1e7303c6c476c06c492947a4fd66134aa..f029761d9471d88125c6bec06323f8b3653f9b1d 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala
@@ -234,10 +234,10 @@ class BigBlueButtonInGW(val system: ActorSystem, recorderApp: RecorderApplicatio
         val swfUri = presBaseUrl + "/slide/" + i
 
         val txtUri = presBaseUrl + "/textfiles/" + i
-        val pngUri = presBaseUrl + "/png/" + i
+        val svgUri = presBaseUrl + "/svg/" + i
 
         val p = new Page(id = id, num = num, thumbUri = thumbnail, swfUri = swfUri,
-          txtUri = txtUri, pngUri = pngUri,
+          txtUri = txtUri, svgUri = svgUri,
           current = current)
         pages += (p.id -> p)
       }
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala
index e367a9e0391916ad22fc4834256259aafefb13d5..66fe57a8d8689fb57f31b3757b0239b2e887d80a 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala
@@ -216,7 +216,7 @@ class MessageSenderActor(val meetingId: String, val service: MessageSender)
     res += "thumb_uri" -> page.thumbUri
     res += "swf_uri" -> page.swfUri
     res += "txt_uri" -> page.txtUri
-    res += "png_uri" -> page.pngUri
+    res += "svg_uri" -> page.svgUri
     res += "current" -> page.current
     res += "x_offset" -> page.xOffset
     res += "y_offset" -> page.yOffset
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala
index 4afaa57e065ffbccf742e61b8bec6f8edab25d7a..ed6084afaa857d964cd664652367e8087769b481 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala
@@ -111,7 +111,7 @@ class RecorderActor(val meetingId: String, val recorder: RecorderApplication)
       event.setThumbUri(msg.page.thumbUri);
       event.setSwfUri(msg.page.swfUri);
       event.setTxtUri(msg.page.txtUri);
-      event.setPngUri(msg.page.pngUri);
+      event.setSvgUri(msg.page.svgUri);
       event.setXOffset(msg.page.xOffset);
       event.setYOffset(msg.page.yOffset);
       event.setWidthRatio(msg.page.widthRatio);
@@ -130,7 +130,7 @@ class RecorderActor(val meetingId: String, val recorder: RecorderApplication)
       event.setThumbUri(msg.page.thumbUri);
       event.setSwfUri(msg.page.swfUri);
       event.setTxtUri(msg.page.txtUri);
-      event.setPngUri(msg.page.pngUri);
+      event.setSvgUri(msg.page.svgUri);
       event.setXOffset(msg.page.xOffset);
       event.setYOffset(msg.page.yOffset);
       event.setWidthRatio(msg.page.widthRatio);
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala
index 47bfb994b3fc54ca6745114e854ca8dcb2bed015..eac0060212da6f3b85e84199e1b0184a1d3c8ca4 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala
@@ -10,7 +10,7 @@ case class Page(id: String, num: Int,
   thumbUri: String = "",
   swfUri: String,
   txtUri: String,
-  pngUri: String,
+  svgUri: String,
   current: Boolean = false,
   xOffset: Double = 0, yOffset: Double = 0,
   widthRatio: Double = 100D, heightRatio: Double = 100D)
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala
index 0b0b3097a082c03e6d87ace495b1af26915c6122..ad67db4b1dbd12e9cd5d6371fdd06e40fd30c18e 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala
@@ -14,7 +14,7 @@ object PesentationMessageToJsonConverter {
     res += "thumb_uri" -> page.thumbUri
     res += "swf_uri" -> page.swfUri
     res += "txt_uri" -> page.txtUri
-    res += "png_uri" -> page.pngUri
+    res += "svg_uri" -> page.svgUri
     res += "current" -> page.current
     res += "x_offset" -> page.xOffset
     res += "y_offset" -> page.yOffset
diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java
index f33f2550f7cdad0f974bc23c23a2f8db93a86b54..8a92ff43cc23d993c3a122a79734c10eaee92023 100755
--- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java
+++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java
@@ -47,7 +47,7 @@ public class GoToSlideReplyMessage {
 						
 						if(pageObj.has(Constants.WIDTH_RATIO)
 								&& pageObj.has(Constants.HEIGHT_RATIO)
-								&& pageObj.has("png_uri")
+								&& pageObj.has("svg_uri")
 								&& pageObj.has("txt_uri")
 								&& pageObj.has("num")
 								&& pageObj.has(Constants.Y_OFFSET)
@@ -59,7 +59,7 @@ public class GoToSlideReplyMessage {
 								) {
 							int wRatio = pageObj.get(Constants.WIDTH_RATIO).getAsInt();
 							int hRatio = pageObj.get(Constants.HEIGHT_RATIO).getAsInt();
-							String pngUri = pageObj.get("png_uri").getAsString();
+							String svgUri = pageObj.get("svg_uri").getAsString();
 							String txtUri = pageObj.get("txt_uri").getAsString();
 							int num = pageObj.get("num").getAsInt();
 							int xOffset = pageObj.get(Constants.X_OFFSET).getAsInt();
@@ -71,7 +71,7 @@ public class GoToSlideReplyMessage {
 
 							page.put(Constants.WIDTH_RATIO, wRatio);
 							page.put(Constants.HEIGHT_RATIO, hRatio);
-							page.put("png_uri", pngUri);
+							page.put("svg_uri", svgUri);
 							page.put("txt_uri", txtUri);
 							page.put("num", num);
 							page.put(Constants.X_OFFSET, xOffset);
diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java
index 36e707a8b9962a953173da60540374387c5ec6f9..2219090ab01c8ffd9e2eb7cc5fdc608aca949c2b 100755
--- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java
+++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java
@@ -328,7 +328,7 @@ public class Util {
 			JsonObject pageObj = (JsonObject)pagesIter.next();
 			if (pageObj.has("id") && pageObj.has("num") 
 					&& pageObj.has("thumb_uri") && pageObj.has("swf_uri")
-					&& pageObj.has("txt_uri") && pageObj.has("png_uri")
+					&& pageObj.has("txt_uri") && pageObj.has("svg_uri")
 					&& pageObj.has("current") && pageObj.has("x_offset")
 					&& pageObj.has("y_offset") && pageObj.has("width_ratio")
 					&& pageObj.has("height_ratio")) {
@@ -340,7 +340,7 @@ public class Util {
 				String pageThumbUri = pageObj.get("thumb_uri").getAsString();
 				String pageSwfUri = pageObj.get("swf_uri").getAsString();
 				String pageTxtUri = pageObj.get("txt_uri").getAsString();
-				String pagePngUri = pageObj.get("png_uri").getAsString();
+				String pageSvgUri = pageObj.get("svg_uri").getAsString();
 				
 				Boolean currentPage = pageObj.get("current").getAsBoolean();
 				Double xOffset = pageObj.get("x_offset").getAsDouble();
@@ -353,7 +353,7 @@ public class Util {
 				page.put("thumbUri", pageThumbUri);
 				page.put("swfUri", pageSwfUri);
 				page.put("txtUri", pageTxtUri);
-				page.put("pngUri", pagePngUri);
+				page.put("svgUri", pageSvgUri);
 				page.put("current", currentPage);
 				page.put("xOffset", xOffset);
 				page.put("yOffset", yOffset);
@@ -527,7 +527,7 @@ public class Util {
 		final String NUM = "num";
 		final String HEIGHT_RATIO = "height_ratio";
 		final String X_OFFSET = "x_offset";
-		final String PNG_URI = "png_uri";
+		final String SVG_URI = "svg_uri";
 		final String THUMB_URI = "thumb_uri";
 		final String TXT_URI = "txt_uri";
 		final String CURRENT = "current";
@@ -539,7 +539,7 @@ public class Util {
 				&& page.has(NUM)
 				&& page.has(HEIGHT_RATIO)
 				&& page.has(X_OFFSET)
-				&& page.has(PNG_URI)
+				&& page.has(SVG_URI)
 				&& page.has(THUMB_URI)
 				&& page.has(CURRENT)
 				&& page.has(TXT_URI)
@@ -553,7 +553,7 @@ public class Util {
 			double num = page.get(NUM).getAsDouble();
 			double heightRatio = page.get(HEIGHT_RATIO).getAsDouble();
 			double xOffset = page.get(X_OFFSET).getAsDouble();
-			String pngUri = page.get(PNG_URI).getAsString();
+			String svgUri = page.get(SVG_URI).getAsString();
 			String thumbUri = page.get(THUMB_URI).getAsString();
 			boolean current = page.get(CURRENT).getAsBoolean();
 			String txtUri = page.get(TXT_URI).getAsString();
@@ -565,7 +565,7 @@ public class Util {
 			finalPage.put(NUM, num);
 			finalPage.put(HEIGHT_RATIO, heightRatio);
 			finalPage.put(X_OFFSET, xOffset);
-			finalPage.put(PNG_URI, pngUri);
+			finalPage.put(SVG_URI, svgUri);
 			finalPage.put(THUMB_URI, thumbUri);
 			finalPage.put(CURRENT, current);
 			finalPage.put(TXT_URI, txtUri);
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java
index 2d9e4a92c485597f14f9bb12b7599b2a27f008b7..e2fe63eb58f5fb65cc460f9cc77bf776dc7eb8f7 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java
@@ -72,7 +72,7 @@ public class PresentationClientMessageSender {
 					  break;
 				  case PresentationSharedMessage.PRESENTATION_SHARED_MESSAGE:
 					  processPresentationSharedMessage(message);
-					  break;
+					  break;
 				}
 			}
 		}		
@@ -151,7 +151,7 @@ public class PresentationClientMessageSender {
 			args.put("current", msg.page.get("current"));
 			args.put("swfUri", msg.page.get("swf_uri"));
 			args.put("txtUri", msg.page.get("txt_uri"));
-			args.put("pngUri", msg.page.get("png_uri"));
+			args.put("svgUri", msg.page.get("svg_uri"));
 			args.put("thumbUri", msg.page.get("thumb_uri"));
 			args.put("xOffset", msg.page.get("x_offset"));
 			args.put("yOffset", msg.page.get("y_offset"));
@@ -301,7 +301,7 @@ public class PresentationClientMessageSender {
 			args.put("xOffset", msg.page.get(Constants.X_OFFSET));
 			args.put("num", msg.page.get("num"));
 			args.put("heightRatio", msg.page.get(Constants.HEIGHT_RATIO));
-			args.put("pngUri", msg.page.get("png_uri"));
+			args.put("svgUri", msg.page.get("svg_uri"));
 			args.put("thumbUri", msg.page.get("thumb_uri"));
 			args.put(Constants.CURRENT, msg.page.get(Constants.CURRENT));
 			args.put("txtUri", msg.page.get("txt_uri"));
@@ -317,6 +317,6 @@ public class PresentationClientMessageSender {
 			BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "goToSlideCallback", message);
 			service.sendMessage(m);
 		}
-	}	
+	}	
 
 }
diff --git a/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee b/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee
index 927d91442480af977d385fe9d0e9c165571df195..46a0b7b32110ac2c56132593431680ff7437ef82 100755
--- a/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee
+++ b/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee
@@ -9,13 +9,13 @@ Template.slide.rendered = ->
       if !$('.panel-footer').hasClass('ui-resizable-resizing') # not in the middle of resizing the message input
         redrawWhiteboard()
     )
-    if currentSlide?.slide?.png_uri?
+    if currentSlide?.slide?.svg_uri?
       createWhiteboardPaper (wpm) ->
         displaySlide wpm
         Tracker.autorun (comp) -> # whiteboard is redrawn every time user becomes a presenter or loses that status
           if BBB.isUserPresenter(getInSession('userId')) isnt undefined
             redrawWhiteboard()
-  pic.src = currentSlide?.slide?.png_uri
+  pic.src = currentSlide?.slide?.svg_uri
 
 @createWhiteboardPaper = (callback) =>
   @whiteboardPaperModel = new Meteor.WhiteboardPaperModel('whiteboard-paper')
@@ -25,7 +25,7 @@ Template.slide.rendered = ->
   currentSlide = getCurrentSlideDoc()
   wpm.create()
   adjustedDimensions = scaleSlide(getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight'))
-  wpm._displayPage(currentSlide?.slide?.png_uri, getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight'))
+  wpm._displayPage(currentSlide?.slide?.svg_uri, getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight'))
   manuallyDisplayShapes()
   wpm.scale(adjustedDimensions.width, adjustedDimensions.height)
 
diff --git a/bigbluebutton-html5/app/server/collection_methods/slides.coffee b/bigbluebutton-html5/app/server/collection_methods/slides.coffee
index 04128babbe5e937c55abf4b3ef9589753b5754dc..09afd0727493be150cb7b2133067f17ff6343507 100755
--- a/bigbluebutton-html5/app/server/collection_methods/slides.coffee
+++ b/bigbluebutton-html5/app/server/collection_methods/slides.coffee
@@ -23,7 +23,7 @@
 				num: slideObject.num
 				x_offset: slideObject.x_offset
 				current: slideObject.current
-				png_uri: slideObject.png_uri
+				svg_uri: slideObject.svg_uri
 				txt_uri: slideObject.txt_uri
 				id: slideObject.id
 				width_ratio: slideObject.width_ratio
diff --git a/bigbluebutton-web/grails-app/conf/UrlMappings.groovy b/bigbluebutton-web/grails-app/conf/UrlMappings.groovy
index c01269da1b78d336191e84f827a9276e53e70f8b..abf6aa14952546e20be2142d925ad5d7b9c50d98 100755
--- a/bigbluebutton-web/grails-app/conf/UrlMappings.groovy
+++ b/bigbluebutton-web/grails-app/conf/UrlMappings.groovy
@@ -25,12 +25,12 @@ class UrlMappings {
 			action = [GET:'showThumbnail']
 		}
 
-		"/presentation/$conference/$room/$presentation_name/pngs"(controller:"presentation") {
-			action = [GET:'numberOfPngs']
+		"/presentation/$conference/$room/$presentation_name/svgs"(controller:"presentation") {
+			action = [GET:'numberOfSvgs']
 		}
 
-		"/presentation/$conference/$room/$presentation_name/png/$id"(controller:"presentation") {
-			action = [GET:'showPngImage']
+		"/presentation/$conference/$room/$presentation_name/svg/$id"(controller:"presentation") {
+			action = [GET:'showSvgImage']
 		}
 	  
 		"/presentation/$conference/$room/$presentation_name/textfiles"(controller:"presentation") {
diff --git a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties
index 7db5c4fd8864631030ab3ca146f7cfe76f659569..2bbf9cb2a3738715eeececd45fb41e564c00b08f 100755
--- a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties
+++ b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties
@@ -69,9 +69,9 @@ maxNumPages=200
 MAX_SWF_FILE_SIZE=500000
 
 #----------------------------------------------------
-# Additional conversion of the presentation slides to PNG
+# Additional conversion of the presentation slides to SVG
 # to be used in the HTML5 client
-pngImagesRequired=false
+svgImagesRequired=false
 
 # Default number of digits for voice conference users joining through the PSTN.
 defaultNumDigitsForTelVoice=5
diff --git a/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml b/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml
index 14501b7d88acd994020da998dbfdb8dc2c4414d6..f4336ed549b692af7d4e86d44e2ed5fe79964c9a 100755
--- a/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml
+++ b/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml
@@ -79,7 +79,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		<property name="imageMagickDir" value="${imageMagickDir}"/>
 	</bean>
 
-  <bean id="pngImageCreator" class="org.bigbluebutton.presentation.imp.PngImageCreatorImp">
+  <bean id="svgImageCreator" class="org.bigbluebutton.presentation.imp.SvgImageCreatorImp">
     <property name="imageMagickDir" value="${imageMagickDir}"/>
   </bean>
   	
@@ -91,18 +91,18 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		<property name="pdfPageToImageConversionService" ref="imageConvSvc"/>
 		<property name="thumbnailCreator" ref="thumbCreator"/>
 		<property name="textFileCreator" ref="textFileCreator"/>
-		<property name="pngImageCreator" ref="pngImageCreator"/>
+		<property name="svgImageCreator" ref="svgImageCreator"/>
 		<property name="blankSlide" value="${BLANK_SLIDE}"/>
 		<property name="maxSwfFileSize" value="${MAX_SWF_FILE_SIZE}"/>
 		<property name="maxConversionTime" value="${maxConversionTime}"/>
 		<property name="swfSlidesGenerationProgressNotifier" ref="swfSlidesGenerationProgressNotifier"/>
-		<property name="pngImagesRequired" value="${pngImagesRequired}"/>
+		<property name="svgImagesRequired" value="${svgImagesRequired}"/>
 	</bean>	
 	
 	<bean id="imageToSwfSlidesGenerationService" class="org.bigbluebutton.presentation.imp.ImageToSwfSlidesGenerationService">
 		<property name="pngPageConverter" ref="png2SwfConverter"/>
 		<property name="jpgPageConverter" ref="jpg2SwfConverter"/>
-		<property name="pngImageCreator" ref="pngImageCreator"/>
+		<property name="svgImageCreator" ref="svgImageCreator"/>
 		<property name="thumbnailCreator" ref="thumbCreator"/>
 		<property name="textFileCreator" ref="textFileCreator"/>
 		<property name="blankSlide" value="${BLANK_SLIDE}"/>
@@ -114,4 +114,4 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		<property name="messagingService" ref="messagingService"/> 
 		<property name="generatedSlidesInfoHelper" ref="generatedSlidesInfoHelper"/>
 	</bean>	
-</beans>
+</beans>
diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy
old mode 100644
new mode 100755
index ce6feec68f03c779aaa162117b4fe3474f21d9d6..4460cac78befdd022c1dc5f2b6df27fdf02be24e
--- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy
+++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy
@@ -144,7 +144,7 @@ class PresentationController {
     return null;
   }
   
-  def showPngImage = {
+  def showSvgImage = {
 	  def presentationName = params.presentation_name
 	  def conf = params.conference
 	  def rm = params.room
@@ -153,11 +153,11 @@ class PresentationController {
 	  InputStream is = null;
 	  try {
   //			def f = confInfo()
-		def pres = presentationService.showPngImage(conf, rm, presentationName, slide)
+		def pres = presentationService.showSvgImage(conf, rm, presentationName, slide)
 		if (pres.exists()) {
 		  def bytes = pres.readBytes()
 		  response.addHeader("Cache-Control", "no-cache")
-		  response.contentType = 'image/png'
+		  response.contentType = 'image/svg+xml'
 		  response.outputStream << bytes;
 		}
 	  } catch (IOException e) {
@@ -308,18 +308,18 @@ class PresentationController {
       }		
   }
 
-  def numberOfPngs = {
+  def numberOfSvgs = {
     def filename = params.presentation_name
     def f = confInfo()
-    def numPngs = presentationService.numberOfPngs(f.conference, f.room, filename)
+    def numSvgs = presentationService.numberOfSvgs(f.conference, f.room, filename)
       withFormat {
         xml {
           render(contentType:"text/xml") {
             conference(id:f.conference, room:f.room) {
               presentation(name:filename) {
-                pngs(count:numPngs) {
-                  for (def i=0;i<numPngs;i++) {
-                      png(name:"pngs/${i}")
+                svgs(count:numSvgs) {
+                  for (def i=0;i<numSvgs;i++) {
+                      svg(name:"svgs/${i}")
                     }
                 }
               }
diff --git a/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy b/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy
old mode 100644
new mode 100755
index 2b1f6b0cc22f96f6db24bf59f1a0532b23897d8c..3e3d700678290f08242b6923a58317f2c0682f9c
--- a/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy
+++ b/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy
@@ -94,8 +94,8 @@ class PresentationService {
 		new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + "slide-${id}.swf")
 	}
 
-	def showPngImage(String conf, String room, String presentationName, String id) {
-		new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + "pngs" + File.separatorChar + "slide${id}.png")
+	def showSvgImage(String conf, String room, String presentationName, String id) {
+		new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + "svgs" + File.separatorChar + "slide${id}.svg")
 	}
 
 	def showPresentation = {conf, room, filename ->
@@ -125,9 +125,9 @@ class PresentationService {
 		thumbDir.listFiles().length
 	}
 
-	def numberOfPngs = {conf, room, name ->
-		def PngsDir = new File(roomDirectory(conf, room).absolutePath + File.separatorChar + name + File.separatorChar + "pngs")
-		PngsDir.listFiles().length
+	def numberOfSvgs = {conf, room, name ->
+		def SvgsDir = new File(roomDirectory(conf, room).absolutePath + File.separatorChar + name + File.separatorChar + "svgs")
+		SvgsDir.listFiles().length
 	}
 
 	def numberOfTextfiles = {conf, room, name ->
@@ -166,8 +166,8 @@ class PresentationService {
 /*** Helper classes **/
 import java.io.FilenameFilter;
 import java.io.File;
-class PngFilter implements FilenameFilter {
+class SvgFilter implements FilenameFilter {
     public boolean accept(File dir, String name) {
-        return (name.endsWith(".png"));
+        return (name.endsWith(".svg"));
     }
 }
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java
index f2eb04fc29112a5b074f3ba1a56683f66e2565a2..53aa6b3c0c7a3988ce59f905cda783ea08a10c80 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java
@@ -33,7 +33,7 @@ public class ConversionMessageConstants {
 	public static final String GENERATED_THUMBNAIL_KEY = "GENERATED_THUMBNAIL";
 	public static final String GENERATING_TEXTFILES_KEY = "GENERATING_TEXTFILES";
 	public static final String GENERATED_TEXTFILES_KEY = "GENERATED_TEXTFILES";
-	public static final String GENERATING_PNGIMAGES_KEY = "GENERATING_PNGIMAGES";
-	public static final String GENERATED_PNGIMAGES_KEY = "GENERATED_PNGIMAGES";
+	public static final String GENERATING_SVGIMAGES_KEY = "GENERATING_SVGIMAGES";
+	public static final String GENERATED_SVGIMAGES_KEY = "GENERATED_SVGIMAGES";
 	public static final String CONVERSION_COMPLETED_KEY = "CONVERSION_COMPLETED";
 }
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/PngImageCreator.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/SvgImageCreator.java
similarity index 88%
rename from bigbluebutton-web/src/java/org/bigbluebutton/presentation/PngImageCreator.java
rename to bigbluebutton-web/src/java/org/bigbluebutton/presentation/SvgImageCreator.java
index 019fc6d4be0f9286f458900d594f707693df6df1..d0af7ad08d7ce646630052056a3082d664e43fc8 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/PngImageCreator.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/SvgImageCreator.java
@@ -22,6 +22,6 @@
  */
 package org.bigbluebutton.presentation;
 
-public interface PngImageCreator {
-	public boolean createPngImages(UploadedPresentation pres);
+public interface SvgImageCreator {
+	public boolean createSvgImages(UploadedPresentation pres);
 }
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java
old mode 100644
new mode 100755
index 1b4f6a4e5710606bd10a1c703bc0b2c6812d6b24..9e781b684a815048ac7ed17e4afe6324bcc030c6
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java
@@ -30,7 +30,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.bigbluebutton.presentation.PageConverter;
 import org.bigbluebutton.presentation.ImageToSwfSlide;
-import org.bigbluebutton.presentation.PngImageCreator;
+import org.bigbluebutton.presentation.SvgImageCreator;
 import org.bigbluebutton.presentation.TextFileCreator;
 import org.bigbluebutton.presentation.ThumbnailCreator;
 import org.bigbluebutton.presentation.UploadedPresentation;
@@ -45,7 +45,7 @@ public class ImageToSwfSlidesGenerationService {
 	private SwfSlidesGenerationProgressNotifier notifier;
 	private PageConverter jpgToSwfConverter;
 	private PageConverter pngToSwfConverter;
-	private PngImageCreator pngImageCreator;
+	private SvgImageCreator svgImageCreator;
 	private ThumbnailCreator thumbnailCreator;
 	private TextFileCreator textFileCreator;
 	private long MAX_CONVERSION_TIME = 5*60*1000;
@@ -69,7 +69,7 @@ public class ImageToSwfSlidesGenerationService {
 		/* adding accessibility */
 		createTextFiles(pres);
 		createThumbnails(pres);
-		createPngImages(pres);
+		createSvgImages(pres);
 		
 		notifier.sendConversionCompletedMessage(pres);
 	}
@@ -95,10 +95,10 @@ public class ImageToSwfSlidesGenerationService {
 		thumbnailCreator.createThumbnails(pres);
 	}
 	
-	private void createPngImages(UploadedPresentation pres) {
-		log.debug("Creating PNG images.");
-		notifier.sendCreatingPngImagesUpdateMessage(pres);
-		pngImageCreator.createPngImages(pres);
+	private void createSvgImages(UploadedPresentation pres) {
+		log.debug("Creating SVG images.");
+		notifier.sendCreatingSvgImagesUpdateMessage(pres);
+		svgImageCreator.createSvgImages(pres);
 	}
 	
 	private void convertImageToSwf(UploadedPresentation pres, PageConverter pageConverter) {
@@ -184,8 +184,8 @@ public class ImageToSwfSlidesGenerationService {
 		this.textFileCreator = textFileCreator;
 	}
 	
-	public void setPngImageCreator(PngImageCreator pngImageCreator) {
-		this.pngImageCreator = pngImageCreator;
+	public void setSvgImageCreator(SvgImageCreator svgImageCreator) {
+		this.svgImageCreator = svgImageCreator;
 	}
 	
 	public void setMaxConversionTime(int minutes) {
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java
index bcf233a91f3d3d9bce66315d43005c29b212f8fa..ed47637f550a2658876ce34d24204f349263b452 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java
@@ -41,7 +41,7 @@ public class PdfPageToImageConversionService {
 		log.debug("Creating temporary pdf " + tempPdfFile.getAbsolutePath());
 		
 		if (extractor.extractPage(presentationFile, tempPdfFile, page)) {
-			File tempPngFile = new File(tempDir.getAbsolutePath() + "/temp-" + page + ".png");
+			File tempPngFile = new File(tempDir.getAbsolutePath() + "/temp-" + page + ".svg");
 			log.debug("Creating PNG " + tempPngFile.getAbsolutePath());
 			
 			if (pdfToImageConverter.convert(tempPdfFile, tempPngFile, 1)) {
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java
old mode 100644
new mode 100755
index 219028f5b22198284be638e53146487bc4fd8427..e245599fe1f2f35a4018765eccdf871d69a9d6dc
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java
@@ -35,7 +35,7 @@ import org.bigbluebutton.presentation.ConversionMessageConstants;
 import org.bigbluebutton.presentation.ConversionUpdateMessage;
 import org.bigbluebutton.presentation.PageConverter;
 import org.bigbluebutton.presentation.PdfToSwfSlide;
-import org.bigbluebutton.presentation.PngImageCreator;
+import org.bigbluebutton.presentation.SvgImageCreator;
 import org.bigbluebutton.presentation.TextFileCreator;
 import org.bigbluebutton.presentation.ThumbnailCreator;
 import org.bigbluebutton.presentation.UploadedPresentation;
@@ -55,11 +55,11 @@ public class PdfToSwfSlidesGenerationService {
 	
 	private ThumbnailCreator thumbnailCreator;
 	private TextFileCreator textFileCreator;
-	private PngImageCreator pngImageCreator;
+	private SvgImageCreator svgImageCreator;
 	private long MAX_CONVERSION_TIME = 5*60*1000;
 	private String BLANK_SLIDE;
 	private int MAX_SWF_FILE_SIZE;
-	private boolean pngImagesRequired;
+	private boolean svgImagesRequired;
 		
 	public void generateSlides(UploadedPresentation pres) {
 		log.debug("Generating slides");		
@@ -70,9 +70,9 @@ public class PdfToSwfSlidesGenerationService {
 			createTextFiles(pres);
 			createThumbnails(pres);
 
-			// only create PNG images if the configuration requires it
-			if (pngImagesRequired) {
-				createPngImages(pres);
+			// only create SVG images if the configuration requires it
+			if (svgImagesRequired) {
+				createSvgImages(pres);
 			}
 
 			notifier.sendConversionCompletedMessage(pres);
@@ -114,10 +114,10 @@ public class PdfToSwfSlidesGenerationService {
 		textFileCreator.createTextFiles(pres);
 	}
 	
-	private void createPngImages(UploadedPresentation pres) {
-		log.info("Creating PNG images. MeetingId=[" + pres.getMeetingId() + "], presId=[" + pres.getId() + "], name=[" + pres.getName() + "]");
-		notifier.sendCreatingPngImagesUpdateMessage(pres);
-		pngImageCreator.createPngImages(pres);
+	private void createSvgImages(UploadedPresentation pres) {
+		log.info("Creating SVG images. MeetingId=[" + pres.getMeetingId() + "], presId=[" + pres.getId() + "], name=[" + pres.getName() + "]");
+		notifier.sendCreatingSvgImagesUpdateMessage(pres);
+		svgImageCreator.createSvgImages(pres);
 	}
 	
 	private void convertPdfToSwf(UploadedPresentation pres) {
@@ -214,8 +214,8 @@ public class PdfToSwfSlidesGenerationService {
 		this.MAX_SWF_FILE_SIZE = size;
 	}
 
-	public void setPngImagesRequired(boolean png) {
-		this.pngImagesRequired = png;
+	public void setSvgImagesRequired(boolean svg) {
+		this.svgImagesRequired = svg;
 	}
 	
 	public void setThumbnailCreator(ThumbnailCreator thumbnailCreator) {
@@ -224,8 +224,8 @@ public class PdfToSwfSlidesGenerationService {
 	public void setTextFileCreator(TextFileCreator textFileCreator) {
 		this.textFileCreator = textFileCreator;
 	}
-	public void setPngImageCreator(PngImageCreator pngImageCreator) {
-		this.pngImageCreator = pngImageCreator;
+	public void setSvgImageCreator(SvgImageCreator svgImageCreator) {
+		this.svgImageCreator = svgImageCreator;
 	}
 	public void setMaxConversionTime(int minutes) {
 		MAX_CONVERSION_TIME = minutes * 60 * 1000;
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PngImageCreatorImp.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SvgImageCreatorImp.java
similarity index 63%
rename from bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PngImageCreatorImp.java
rename to bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SvgImageCreatorImp.java
index e36a22639deb412c39d7c76aa030f326f08848e7..ce76de22c7b592e2bfc9685e25ae35127aafedef 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PngImageCreatorImp.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SvgImageCreatorImp.java
@@ -6,21 +6,21 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Writer;
 
-import org.bigbluebutton.presentation.PngImageCreator;
+import org.bigbluebutton.presentation.SvgImageCreator;
 import org.bigbluebutton.presentation.SupportedFileTypes;
 import org.bigbluebutton.presentation.UploadedPresentation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PngImageCreatorImp implements PngImageCreator {
-	private static Logger log = LoggerFactory.getLogger(PngImageCreatorImp.class);
+public class SvgImageCreatorImp implements SvgImageCreator {
+	private static Logger log = LoggerFactory.getLogger(SvgImageCreatorImp.class);
 	
 	private String IMAGEMAGICK_DIR;
 	
 	@Override
-	public boolean createPngImages(UploadedPresentation pres) {
+	public boolean createSvgImages(UploadedPresentation pres) {
 		boolean success = false;
-		File imagePresentationDir = determinePngImagesDirectory(pres.getUploadedFile());
+		File imagePresentationDir = determineSvgImagesDirectory(pres.getUploadedFile());
 		if (! imagePresentationDir.exists())
 			imagePresentationDir.mkdir();
 		
@@ -28,7 +28,7 @@ public class PngImageCreatorImp implements PngImageCreator {
 		
 		try {
 			extractPdfPages(pres);
-			success = generatePngImages(imagePresentationDir,pres);
+			success = generateSvgImages(imagePresentationDir,pres);
 	    } catch (InterruptedException e) {
 	    	log.warn("Interrupted Exception while generating images.");
 	        success = false;
@@ -38,7 +38,7 @@ public class PngImageCreatorImp implements PngImageCreator {
 	}
 	
 	private void extractPdfPages(UploadedPresentation pres){
-		File tmpDir = new File(pres.getUploadedFile().getParent() + File.separatorChar + "pngs" + File.separatorChar + "tmp");
+		File tmpDir = new File(pres.getUploadedFile().getParent() + File.separatorChar + "svgs" + File.separatorChar + "tmp");
 		if (! tmpDir.exists())
 			tmpDir.mkdir();
 		
@@ -52,21 +52,26 @@ public class PngImageCreatorImp implements PngImageCreator {
 	 	}
 	}
 
-	private boolean generatePngImages(File imagePresentationDir, UploadedPresentation pres) throws InterruptedException {
+	private boolean generateSvgImages(File imagePresentationDir, UploadedPresentation pres) throws InterruptedException {
 		String source = pres.getUploadedFile().getAbsolutePath();
 	 	String dest;
 	 	String COMMAND = "";
 	 	boolean done = true;
 	 	if(SupportedFileTypes.isImageFile(pres.getFileType())){
-	 		dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.png";
+                       dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.pdf";
 	 		COMMAND = IMAGEMAGICK_DIR + "/convert " + source + " " + dest;
 	 		done = new ExternalProcessExecutor().exec(COMMAND, 60000);
+
+                       source = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.pdf";
+                       dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.svg";
+                       COMMAND = "pdftocairo -rx 300 -ry 300 -svg -q -f 1 -l 1 " + source + " " + dest;
+                       done = new ExternalProcessExecutor().exec(COMMAND, 60000);
 		 	
 	 	}else{
 	 		for(int i=1; i<=pres.getNumberOfPages(); i++){
 	 			File tmp = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "tmp" + File.separatorChar + "slide" + i + ".pdf");
-	 			File destpng = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "slide" + i + ".png");
-				COMMAND = IMAGEMAGICK_DIR + "/convert -density 300x300 -quality 90 +dither -depth 8 -colors 256 " + File.separatorChar + tmp.getAbsolutePath() + " " + destpng.getAbsolutePath();
+	 			File destsvg = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "slide" + i + ".svg");
+				COMMAND = "pdftocairo -rx 300 -ry 300 -svg -q -f 1 -l 1 " + File.separatorChar + tmp.getAbsolutePath() + " " + destsvg.getAbsolutePath();
 
 	 			done = new ExternalProcessExecutor().exec(COMMAND, 60000);
 	 			if(!done){
@@ -78,12 +83,12 @@ public class PngImageCreatorImp implements PngImageCreator {
 	 	if (done) {
 	 		return true;
 	 	} 
-	 	log.warn("Failed to create png images: " + COMMAND);	 		
+	 	log.warn("Failed to create svg images: " + COMMAND);	 		
 		return false;
 	}
 	
-	private File determinePngImagesDirectory(File presentationFile) {
-		return new File(presentationFile.getParent() + File.separatorChar + "pngs");
+	private File determineSvgImagesDirectory(File presentationFile) {
+		return new File(presentationFile.getParent() + File.separatorChar + "svgs");
 	}
 	
 	private void cleanDirectory(File directory) {	
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java
index a04981e87f807274ef6f2649d839d22ef8d4e007..d3ded12f3af714898192a4541a99a81de39353d4 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java
@@ -21,9 +21,9 @@ package org.bigbluebutton.presentation.imp;
 
 import java.util.Map;
 
-import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringEscapeUtils;
 import org.bigbluebutton.api.messaging.MessagingConstants;
-import org.bigbluebutton.api.messaging.MessagingService;
+import org.bigbluebutton.api.messaging.MessagingService;
 import org.bigbluebutton.presentation.ConversionMessageConstants;
 import org.bigbluebutton.presentation.ConversionUpdateMessage;
 import org.bigbluebutton.presentation.GeneratedSlidesInfoHelper;
@@ -47,7 +47,7 @@ public class SwfSlidesGenerationProgressNotifier {
 			String updateMsg = gson.toJson(msg);
 			log.debug("SENDING: " + updateMsg);
 			messagingService.send(MessagingConstants.TO_PRESENTATION_CHANNEL, updateMsg);
-			log.debug("SENT: " + updateMsg);
+			log.debug("SENT: " + updateMsg);
 		} else {
 			log.warn("MessagingService has not been set");
 		}
@@ -98,9 +98,9 @@ public class SwfSlidesGenerationProgressNotifier {
 		notifyProgressListener(builder.build().getMessage());	
 	}
 
-	public void sendCreatingPngImagesUpdateMessage(UploadedPresentation pres) {
+	public void sendCreatingSvgImagesUpdateMessage(UploadedPresentation pres) {
 		MessageBuilder builder = new ConversionUpdateMessage.MessageBuilder(pres);
-		builder.messageKey(ConversionMessageConstants.GENERATING_PNGIMAGES_KEY);
+		builder.messageKey(ConversionMessageConstants.GENERATING_SVGIMAGES_KEY);
 		notifyProgressListener(builder.build().getMessage());
 	}
 }