diff --git a/modules/ml/include/opencv2/ml.hpp b/modules/ml/include/opencv2/ml.hpp
index 5e633c4d0..63a29c80e 100644
--- a/modules/ml/include/opencv2/ml.hpp
+++ b/modules/ml/include/opencv2/ml.hpp
@@ -827,6 +827,22 @@ public:
         return model->isTrained() ? model : Ptr<_Tp>();
     }
 
+    /** @brief Loads model from an XML String
+
+    This is static template method of StatModel. It's usage is following (in the case of SVM): :
+
+        Ptr<SVM> svm = StatModel::loadFromString<SVM>(myXMLStringModel);
+
+    @param strModel The string variable containing the model (in an XML format) you want to load.
+     */
+    template<typename _Tp> static Ptr<_Tp> loadFromString(const String& strModel)
+	{
+		FileStorage fs(strModel, FileStorage::READ + FileStorage::MEMORY + FileStorage::FORMAT_XML);
+		Ptr<_Tp> model = _Tp::create();
+		model->read(fs.getFirstTopLevelNode());
+		return model->isTrained() ? model : Ptr<_Tp>();
+	}
+    
     template<typename _Tp> static Ptr<_Tp> train(const Ptr<TrainData>& data, const typename _Tp::Params& p, int flags=0)
     {
         Ptr<_Tp> model = _Tp::create(p);
@@ -1511,6 +1527,7 @@ public:
     };
 
     /** @brief The class represents a decision tree node. It has public members:
+
     -   member double value
     Value at the node: a class label in case of classification or estimated function value in case
     of regression.