diff --git a/resources/library/interactive/Barre_prof.wgt/config.xml b/resources/library/interactive/Barre_prof.wgt/config.xml
index 103098a0..b2eaab1e 100644
--- a/resources/library/interactive/Barre_prof.wgt/config.xml
+++ b/resources/library/interactive/Barre_prof.wgt/config.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<widget xmlns="http://www.w3.org/ns/widgets" 
-		xmlns:ub="http://uniboard.mnemis.com/widgets"
-        id="http://www.example.net/widgets/helloworld" 
+<widget xmlns="http://www.w3.org/ns/widgets"
+                xmlns:ub="http://uniboard.mnemis.com/widgets"
+        id="http://www.example.net/widgets/helloworld"
         version="1.0"
         width="550"
         height="325"
-		ub:resizable="false">
-		
-		<name>Rich Note</name>
-		<description>Allows the teacher to attach a rich note to the page.</description>
-		<content src="index.html"/> 
+                ub:resizable="false">
+
+                <name>Rich Note</name>
+                <description>Allows the teacher to attach a rich note to the page.</description>
+                <content src="index.html"/>
 </widget>
diff --git a/src/adaptors/UBCFFSubsetAdaptor.cpp b/src/adaptors/UBCFFSubsetAdaptor.cpp
index d07255ef..aea6bcd7 100644
--- a/src/adaptors/UBCFFSubsetAdaptor.cpp
+++ b/src/adaptors/UBCFFSubsetAdaptor.cpp
@@ -27,6 +27,7 @@
 #include "domain/UBGraphicsVideoItem.h"
 #include "domain/UBGraphicsAudioItem.h"
 #include "domain/UBGraphicsWidgetItem.h"
+#include "domain/UBGraphicsTextItem.h"
 #include "domain/UBW3CWidget.h"
 
 #include "frameworks/UBFileSystemUtils.h"
@@ -440,6 +441,49 @@ void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTextAttributes(const QDomElemen
     if (!element.attribute(aTransform).isNull())
         fontTransform = transformFromString(element.attribute(aTransform));
 }
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::readTextBlockAttr(const QDomElement &element, QTextBlockFormat &format)
+{
+    QString fontStretchText = element.attribute(aFontstretch);
+    if (!fontStretchText.isNull()) format.setAlignment(Qt::AlignJustify);
+
+    QString align = element.attribute(aTextalign);
+    if (!align.isNull()) {
+        if      (align == "middle" || align == "center") format.setAlignment(Qt::AlignHCenter);
+        else if (align == "start")                       format.setAlignment(Qt::AlignLeft);
+        else if (align == "end")                         format.setAlignment(Qt::AlignRight);
+        else if (align == "justify")                     format.setAlignment(Qt::AlignJustify);
+    }
+}
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::readTextCharAttr(const QDomElement &element, QTextCharFormat &format)
+{
+    QString fontSz = element.attribute(aFontSize);
+    if (!fontSz.isNull()) {
+        qreal fontSize = fontSz.toDouble() * 72 / QApplication::desktop()->physicalDpiY();
+        format.setFontPointSize(fontSize);
+    }
+    QString fontColorText = element.attribute(aFill);
+    if (!fontColorText.isNull()) {
+        QColor fontColor = colorFromString(fontColorText);
+        if (fontColor.isValid()) format.setForeground(fontColor);
+    }
+    QString fontFamilyText = element.attribute(aFontfamily);
+    if (!fontFamilyText.isNull()) {
+        format.setFontFamily(fontFamilyText);
+    }
+    if (!element.attribute(aFontstyle).isNull()) {
+        bool italic = (element.attribute(aFontstyle) == "italic");
+        format.setFontItalic(italic);
+    }
+    QString weight = element.attribute(aFontweight);
+    if (!weight.isNull())  {
+        if      (weight == "normal")   format.setFontWeight(QFont::Normal);
+        else if (weight == "light")    format.setFontWeight(QFont::Light);
+        else if (weight == "demibold") format.setFontWeight(QFont::DemiBold);
+        else if (weight == "bold")     format.setFontWeight(QFont::Bold);
+        else if (weight == "black")    format.setFontWeight(QFont::Black);
+    }
+}
+
 bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgText(const QDomElement &element)
 {
     qreal x = element.attribute(aX).toDouble();
@@ -538,53 +582,70 @@ void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTSpan(const QDomElement &parent
 
 bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgTextarea(const QDomElement &element)
 {
+
     qreal x = element.attribute(aX).toDouble();
     qreal y = element.attribute(aY).toDouble();
     qreal width = element.attribute(aWidth).toDouble();
     qreal height = element.attribute(aHeight).toDouble();
 
-    qreal fontSize = 12;
-    QColor fontColor(qApp->palette().foreground().color());
-    QString fontFamily = "Arial";
-    QString fontStretch = "normal";
-    bool italic = false;
-    int fontWeight = QFont::Normal;
-    int textAlign = Qt::AlignLeft;
+
+
+//    qreal fontSize = 12;
+//    QColor fontColor(qApp->palette().foreground().color());
+//    QString fontFamily = "Arial";
+//    QString fontStretch = "normal";
+//    bool italic = false;
+//    int fontWeight = QFont::Normal;
+//    int textAlign = Qt::AlignLeft;
     QTransform fontTransform;
-    parseTextAttributes(element, fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
+//    parseTextAttributes(element, fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
 
-    QSvgGenerator *generator = createSvgGenerator(width, height);
-    QPainter painter;
-    painter.begin(generator);
+//    QSvgGenerator *generator = createSvgGenerator(width, height);
+//    QPainter painter;
+//    painter.begin(generator);
 
-    painter.setFont(QFont(fontFamily, fontSize, fontWeight, italic));
+//    painter.setFont(QFont(fontFamily, fontSize, fontWeight, italic));
 
-    qreal curY = 0.0;
-    qreal curX = 0.0;
-    qreal linespacing = QFontMetricsF(painter.font()).leading();
+//    qreal curY = 0.0;
+//    qreal curX = 0.0;
+//    qreal linespacing = QFontMetricsF(painter.font()).leading();
 
-//    remember if text area has transform
-//    QString transformString;
+////    remember if text area has transform
+////    QString transformString;
     QTransform transform = fontTransform;
-    bool hasTransform = !fontTransform.isIdentity();
+    bool hasTransform = false;//!fontTransform.isIdentity();
 
-    QRectF lastDrawnTextBoundingRect;
-    //parse text area tags
+//    QRectF lastDrawnTextBoundingRect;
+//    //parse text area tags
 
-    //recursive call any tspan in text svg element
-    parseTSpan(element, painter
-               , curX, curY, width, height, linespacing, lastDrawnTextBoundingRect
-               , fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
+//    //recursive call any tspan in text svg element
+//    parseTSpan(element, painter
+//               , curX, curY, width, height, linespacing, lastDrawnTextBoundingRect
+//               , fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
 
-    painter.end();
+//    painter.end();
 
     //add resulting svg file to scene
-    UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
+//    UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
 
+    QFile file("/home/ilia/Documents/tmp/1/index.html");
+    file.open(QIODevice::ReadOnly);
+    QByteArray barr = file.readAll();
+    file.close();
+    QString str(barr);
+    UBGraphicsTextItem *svgItem = mCurrentScene->addTextHtml(str);
+    svgItem->resize(width * mVBTransFactor, height * mVBTransFactor);
+
+//    QTextCursor cursor;
+//    cursor.insertBlock();
+//    cursor.insertText("way away");
+//    cursor.insertBlock();
+//    cursor.insertText("for the right");
+//    svgItem->setTextCursor(cursor);
     repositionSvgItem(svgItem, width, height, x, y, hasTransform, transform);
-    hashSceneItem(element, svgItem);
+//    hashSceneItem(element, svgItem);
 
-    delete generator;
+//    delete generator;
     return true;
 }
 bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgImage(const QDomElement &element)
diff --git a/src/adaptors/UBCFFSubsetAdaptor.h b/src/adaptors/UBCFFSubsetAdaptor.h
index d92dba52..82c8c5f3 100644
--- a/src/adaptors/UBCFFSubsetAdaptor.h
+++ b/src/adaptors/UBCFFSubsetAdaptor.h
@@ -32,6 +32,8 @@ class QTransform;
 class QPainter;
 class UBGraphicsItem;
 class QGraphicsItem;
+class QTextBlockFormat;
+class QTextCharFormat;
 
 
 class UBCFFSubsetAdaptor
@@ -104,6 +106,9 @@ private:
         inline void parseTextAttributes(const QDomElement &element, qreal &fontSize, QColor &fontColor,
                                  QString &fontFamily, QString &fontStretch, bool &italic,
                                  int &fontWeight, int &textAlign, QTransform &fontTransform);
+        inline void parseTextAttributes(const QDomElement &element, QFont &font, QColor);
+        inline void readTextBlockAttr(const QDomElement &element, QTextBlockFormat &format);
+        inline void readTextCharAttr(const QDomElement &element, QTextCharFormat &format);
 
         //elements parsing methods
         bool parseDoc();
diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp
index 09c1fb8d..0d1bc0a3 100644
--- a/src/adaptors/UBSvgSubsetAdaptor.cpp
+++ b/src/adaptors/UBSvgSubsetAdaptor.cpp
@@ -76,7 +76,6 @@ QString UBSvgSubsetAdaptor::toSvgTransform(const QMatrix& matrix)
            .arg(matrix.m22(), 0 , 'g')
            .arg(matrix.dx(), 0 , 'g')
            .arg(matrix.dy(), 0 , 'g');
-
 }
 
 
diff --git a/src/adaptors/UBSvgSubsetAdaptor.h b/src/adaptors/UBSvgSubsetAdaptor.h
index cd57ebcc..4b52193e 100644
--- a/src/adaptors/UBSvgSubsetAdaptor.h
+++ b/src/adaptors/UBSvgSubsetAdaptor.h
@@ -46,8 +46,8 @@ class UBSvgSubsetAdaptor
 {
     private:
 
-        UBSvgSubsetAdaptor() {};
-        virtual ~UBSvgSubsetAdaptor() {};
+        UBSvgSubsetAdaptor() {;}
+        virtual ~UBSvgSubsetAdaptor() {;}
 
     public:
 
diff --git a/src/core/UB.h b/src/core/UB.h
index 3f60df17..fbe7dd77 100644
--- a/src/core/UB.h
+++ b/src/core/UB.h
@@ -75,7 +75,9 @@ struct UBGraphicsItemData
 {
     enum Enum
     {
-        ItemLayerType, ItemLocked
+        ItemLayerType
+        , ItemLocked
+        , ItemEditable//for text only
     };
 };
 
diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h
index 055a5de3..9986db6b 100644
--- a/src/domain/UBGraphicsItemDelegate.h
+++ b/src/domain/UBGraphicsItemDelegate.h
@@ -165,12 +165,11 @@ class UBGraphicsItemDelegate : public QObject
 
         QList<DelegateButton*> mButtons;
 
-    protected slots:
+protected slots:
 
         virtual void gotoContentSource(bool checked);
 
-
-     private:
+private:
 
         QPointF mOffset;
         QTransform mPreviousTransform;
diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp
index 99bea72f..c27734e7 100644
--- a/src/domain/UBGraphicsScene.cpp
+++ b/src/domain/UBGraphicsScene.cpp
@@ -1311,7 +1311,27 @@ UBGraphicsTextItem* UBGraphicsScene::addTextWithFont(const QString& pString, con
 
     return textItem;
 }
+UBGraphicsTextItem *UBGraphicsScene::addTextHtml(const QString &pString)
+{
+    UBGraphicsTextItem *textItem = new UBGraphicsTextItem();
+    textItem->setPlainText("");
+    textItem->setHtml(pString);
+
+    addItem(textItem);
+    textItem->show();
 
+    UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, 0, textItem);
+    UBApplication::undoStack->push(uc);
+
+    connect(textItem, SIGNAL(textUndoCommandAdded(UBGraphicsTextItem *)), this, SLOT(textUndoCommandAdded(UBGraphicsTextItem *)));
+
+    textItem->setSelected(true);
+    textItem->setFocus();
+
+    setDocumentUpdated();
+
+    return textItem;
+}
 
 void UBGraphicsScene::addItem(QGraphicsItem* item)
 {
diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h
index 5e6a9a3b..70ce9465 100644
--- a/src/domain/UBGraphicsScene.h
+++ b/src/domain/UBGraphicsScene.h
@@ -91,6 +91,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
 
         UBGraphicsTextItem* addTextWithFont(const QString& pString, const QPointF& pTopLeft = QPointF(0, 0)
                 , int pointSize = -1, const QString& fontFamily = "", bool bold = false, bool italic = false);
+        UBGraphicsTextItem* addTextHtml(const QString &pString = QString());
 
         UBGraphicsW3CWidgetItem* addOEmbed(const QUrl& pContentUrl, const QPointF& pPos = QPointF(0, 0));
 
diff --git a/src/domain/UBGraphicsTextItem.cpp b/src/domain/UBGraphicsTextItem.cpp
index b2a5536f..6125997c 100644
--- a/src/domain/UBGraphicsTextItem.cpp
+++ b/src/domain/UBGraphicsTextItem.cpp
@@ -56,8 +56,10 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent)
     }
 
     setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
+//    setData(UBGraphicsItemData::ItemEditable, QVariant(true));
 
     setFlag(QGraphicsItem::ItemIsSelectable, true);
+//    setFlag(QGraphicsItem::ItemIsMovable, true);
     setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
 
     setTextInteractionFlags(Qt::TextEditorInteraction);
@@ -65,11 +67,11 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent)
     connect(document(), SIGNAL(contentsChanged()), mDelegate, SLOT(contentsChanged()));
     connect(document(), SIGNAL(undoCommandAdded()), this, SLOT(undoCommandAdded()));
 
-    connect(document()->documentLayout(), SIGNAL(documentSizeChanged(const QSizeF &)), this, SLOT(documentSizeChanged(const QSizeF &)));
+    connect(document()->documentLayout(), SIGNAL(documentSizeChanged(const QSizeF &)),
+            this, SLOT(documentSizeChanged(const QSizeF &)));
 
 }
 
-
 UBGraphicsTextItem::~UBGraphicsTextItem()
 {
     if (mDelegate)
@@ -78,7 +80,6 @@ UBGraphicsTextItem::~UBGraphicsTextItem()
     }
 }
 
-
 QVariant UBGraphicsTextItem::itemChange(GraphicsItemChange change, const QVariant &value)
 {
     if (QGraphicsItem::ItemSelectedChange == change)
@@ -106,9 +107,14 @@ QVariant UBGraphicsTextItem::itemChange(GraphicsItemChange change, const QVarian
     return QGraphicsTextItem::itemChange(change, newValue);
 }
 
-
 void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
+    if (mDelegate)
+        mDelegate->mousePressEvent(event);
+
+    if (!data(UBGraphicsItemData::ItemEditable).toBool())
+        return;
+
     int elapsed = mLastMousePressTime.msecsTo(QTime::currentTime());
 
     if (elapsed < UBApplication::app()->doubleClickInterval())
@@ -126,12 +132,8 @@ void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
 
     if (mMultiClickState == 1)
     {
-        if (mDelegate)
-            mDelegate->mousePressEvent(event);
-
+//        setTextInteractionFlags(Qt::TextEditorInteraction);
         QGraphicsTextItem::mousePressEvent(event);
-        setTextInteractionFlags(Qt::TextEditorInteraction);
-
         setFocus();
     }
     else if (mMultiClickState == 2)
@@ -152,7 +154,6 @@ void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-
 void UBGraphicsTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
 {
     if (!mDelegate || !mDelegate->mouseMoveEvent(event))
@@ -161,7 +162,6 @@ void UBGraphicsTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-
 void UBGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
     if (mMultiClickState == 1)
@@ -177,7 +177,6 @@ void UBGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-
 void UBGraphicsTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 {
     QColor color = UBSettings::settings()->isDarkBackground() ? mColorOnDarkBackground : mColorOnLightBackground;
diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp
index 1ab6dc3f..856919d6 100644
--- a/src/domain/UBGraphicsTextItemDelegate.cpp
+++ b/src/domain/UBGraphicsTextItemDelegate.cpp
@@ -27,6 +27,7 @@
 #include "core/UBDisplayManager.h" // TODO UB 4.x clean that dependency
 
 #include "core/memcheck.h"
+#include "board/UBBoardController.h"
 
 const int UBGraphicsTextItemDelegate::sMinPixelSize = 8;
 
@@ -139,16 +140,21 @@ void UBGraphicsTextItemDelegate::pickFont()
             UBSettings::settings()->setFontPixelSize(mLastFontPixelSize);
             UBSettings::settings()->setBoldFont(selectedFont.bold());
             UBSettings::settings()->setItalicFont(selectedFont.italic());
-            delegated()->setFont(selectedFont);
-            delegated()->setSelected(true);
 
+            //setting format for selected item
+            QTextCursor curCursor = delegated()->textCursor();
+            QTextCharFormat format;
+            format.setFont(selectedFont);
+            curCursor.mergeCharFormat(format);
+            delegated()->setTextCursor(curCursor);
+
+            delegated()->setSelected(true);
             delegated()->document()->adjustSize();
             delegated()->contentsChanged();
         }
     }
 }
 
-
 void UBGraphicsTextItemDelegate::pickColor()
 {
     if (mDelegated && mDelegated->scene() && mDelegated->scene()->views().size() > 0)
@@ -164,8 +170,17 @@ void UBGraphicsTextItemDelegate::pickColor()
         {
             QColor selectedColor = colorDialog.selectedColor();
             delegated()->setDefaultTextColor(selectedColor);
-            delegated()->setColorOnDarkBackground(selectedColor);
-            delegated()->setColorOnLightBackground(selectedColor);
+//            delegated()->setColorOnDarkBackground(selectedColor);
+//            delegated()->setColorOnLightBackground(selectedColor);
+            QTextCursor curCursor = delegated()->textCursor();
+            QTextCharFormat format;
+            format.setForeground(QBrush(selectedColor));
+//            format.setBackground(Qt::yellow);
+            curCursor.mergeCharFormat(format);
+            QTextBlockFormat blFormat;
+            blFormat.setAlignment(Qt::AlignCenter);
+            curCursor.setBlockFormat(blFormat);
+            delegated()->setTextCursor(curCursor);
 
             UBGraphicsTextItem::lastUsedTextColor = selectedColor;
 
@@ -175,7 +190,6 @@ void UBGraphicsTextItemDelegate::pickColor()
     }
 }
 
-
 void UBGraphicsTextItemDelegate::decreaseSize()
 {
     QFontInfo fi(delegated()->font());
@@ -203,7 +217,6 @@ void UBGraphicsTextItemDelegate::decreaseSize()
 
 }
 
-
 void UBGraphicsTextItemDelegate::increaseSize()
 {
     QFontInfo fi(delegated()->font());
@@ -229,8 +242,38 @@ void UBGraphicsTextItemDelegate::increaseSize()
     qDebug() << newPixelSize;
 }
 
-
 UBGraphicsTextItem* UBGraphicsTextItemDelegate::delegated()
 {
     return static_cast<UBGraphicsTextItem*>(mDelegated);
 }
+void UBGraphicsTextItemDelegate::setEditable(bool editable)
+{
+    if (editable) {
+        delegated()->setTextInteractionFlags(Qt::TextEditorInteraction);
+        mDelegated->setData(UBGraphicsItemData::ItemEditable, QVariant(true));
+    } else {
+        QTextCursor cursor(delegated()->document());
+        cursor.clearSelection();
+        delegated()->setTextCursor(cursor);
+
+        delegated()->setTextInteractionFlags(Qt::NoTextInteraction);
+        mDelegated->setData(UBGraphicsItemData::ItemEditable, QVariant(false));
+    }
+}
+bool UBGraphicsTextItemDelegate::isEditable()
+{
+    return mDelegated->data(UBGraphicsItemData::ItemEditable).toBool();
+}
+void UBGraphicsTextItemDelegate::decorateMenu(QMenu *menu)
+{
+    UBGraphicsItemDelegate::decorateMenu(menu);
+
+    mEditableAction = menu->addAction(tr("Editable"), this, SLOT(setEditable(bool)));
+    mEditableAction->setCheckable(true);
+    mEditableAction->setChecked(true);
+
+}
+void UBGraphicsTextItemDelegate::updateMenuActionState()
+{
+    UBGraphicsItemDelegate::updateMenuActionState();
+}
diff --git a/src/domain/UBGraphicsTextItemDelegate.h b/src/domain/UBGraphicsTextItemDelegate.h
index 827e2b43..f29d1070 100644
--- a/src/domain/UBGraphicsTextItemDelegate.h
+++ b/src/domain/UBGraphicsTextItemDelegate.h
@@ -27,17 +27,21 @@ class UBGraphicsTextItem;
 
 class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
 {
-    Q_OBJECT;
+    Q_OBJECT
 
     public:
         UBGraphicsTextItemDelegate(UBGraphicsTextItem* pDelegated, QObject * parent = 0);
         virtual ~UBGraphicsTextItemDelegate();
+        bool isEditable();
 
     public slots:
         void contentsChanged();
+        virtual void setEditable(bool);
 
     protected:
         virtual void buildButtons();
+        virtual void decorateMenu(QMenu *menu);
+        virtual void updateMenuActionState();
 
     private:
 
@@ -54,6 +58,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
 
     private:
         void customize(QFontDialog &fontDialog);
+        QAction *mEditableAction;
 
     private slots: