diff --git a/aconvert2/src/DotConverter.cpp b/aconvert2/src/DotConverter.cpp
index 8a93361ee7044aa353d9bfe6f6c1a6543aab21c7..22c3fed9012f6e967f18e04cd919265ee48eb23f 100644
--- a/aconvert2/src/DotConverter.cpp
+++ b/aconvert2/src/DotConverter.cpp
@@ -888,7 +888,7 @@ void DotConverter::transitions(const automaton::NFTA& fta, const std::map<label:
 	//put transitions from automaton to "transitions"
 	for (const auto& transition : fta.getTransitions()) {
 		std::string symbol = alib::StringDataFactory::toString(transition.first.first.getSymbol());
-		symbol += std::utos(transition.first.first.getRank().getData());
+		symbol += std::to_string(transition.first.first.getRank().getData());
 
 		for(const label::Label& to : transition.second) {
 			std::pair<int, std::vector<int>> key(states.find(to)->second, {});
@@ -939,7 +939,7 @@ void DotConverter::transitions(const automaton::DFTA& fta, const std::map<label:
 	//put transitions from automaton to "transitions"
 	for (const auto& transition : fta.getTransitions()) {
 		std::string symbol = alib::StringDataFactory::toString(transition.first.first.getSymbol());
-		symbol += std::utos(transition.first.first.getRank().getData());
+		symbol += std::to_string(transition.first.first.getRank().getData());
 
 		std::pair<int, std::vector<int>> key(states.find(transition.second)->second, {});
 		for(const label::Label& state : transition.first.second) {
diff --git a/aconvert2/src/TikZConverter.cpp b/aconvert2/src/TikZConverter.cpp
index f31c3a1bd0647837758c8288506a0bf34c5d991d..d2763873c366001d93654d0088714ad053597b5e 100644
--- a/aconvert2/src/TikZConverter.cpp
+++ b/aconvert2/src/TikZConverter.cpp
@@ -857,7 +857,7 @@ void TikZConverter::transitions ( const automaton::NFTA & fta, const std::map <
 	 // put transitions from automaton to "transitions"
 	for ( const auto & transition : fta.getTransitions ( ) ) {
 		std::string symbol = alib::StringDataFactory::toString ( transition.first.first.getSymbol ( ) );
-		symbol += std::utos ( transition.first.first.getRank ( ).getData ( ) );
+		symbol += std::to_string ( transition.first.first.getRank ( ).getData ( ) );
 
 		for ( const label::Label & to : transition.second ) {
 			std::pair < int, std::vector < int > > key ( states.find ( to )->second, { } );
@@ -922,7 +922,7 @@ void TikZConverter::transitions ( const automaton::DFTA & fta, const std::map <
 	 // put transitions from automaton to "transitions"
 	for ( const auto & transition : fta.getTransitions ( ) ) {
 		std::string symbol = alib::StringDataFactory::toString ( transition.first.first.getSymbol ( ) );
-		symbol += std::utos ( transition.first.first.getRank ( ).getData ( ) );
+		symbol += std::to_string ( transition.first.first.getRank ( ).getData ( ) );
 
 		std::pair < int, std::vector < int > > key ( states.find ( transition.second )->second, { } );
 
diff --git a/alib2common/src/XmlApi.hpp b/alib2common/src/XmlApi.hpp
index 83f5950a85841da1880ff71c6453b5e7695efced..28a866c00410f19387d7e61a3848daf39f866e3e 100644
--- a/alib2common/src/XmlApi.hpp
+++ b/alib2common/src/XmlApi.hpp
@@ -130,7 +130,7 @@ public:
 		if ( tagName == Group::getXmlTagRefName() ) {
 			sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, Group::getXmlTagRefName() );
 			sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ATTRIBUTE, "id" );
-			int id = std::stoi ( sax::FromXMLParserHelper::popTokenData ( input, sax::Token::TokenType::CHARACTER ) );
+			int id = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( input, sax::Token::TokenType::CHARACTER ) );
 			sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ATTRIBUTE, "id" );
 			sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, Group::getXmlTagRefName() );
 			std::map < int, void * >::iterator elem = input.idToInstance ( Group::getXmlTagRefName() ).find ( id );
@@ -172,7 +172,7 @@ public:
 		} else {
 			output.emplace_back ( Group::getXmlTagRefName(), sax::Token::TokenType::START_ELEMENT );
 			output.emplace_back ( "id", sax::Token::TokenType::START_ATTRIBUTE );
-			output.emplace_back ( std::itos ( elem->second ), sax::Token::TokenType::CHARACTER );
+			output.emplace_back ( std::to_string ( elem->second ), sax::Token::TokenType::CHARACTER );
 			output.emplace_back ( "id", sax::Token::TokenType::END_ATTRIBUTE );
 			output.emplace_back ( Group::getXmlTagRefName(), sax::Token::TokenType::END_ELEMENT );
 		}
diff --git a/alib2data/src/graph/common/GraphFromXMLParser.cpp b/alib2data/src/graph/common/GraphFromXMLParser.cpp
index eb0ffe999e5b02731004213783399cc204290b14..83e5b38a7a9b8d6d217e312ab9b9c6b14c32f5c6 100644
--- a/alib2data/src/graph/common/GraphFromXMLParser.cpp
+++ b/alib2data/src/graph/common/GraphFromXMLParser.cpp
@@ -69,7 +69,7 @@ UndirectedEdge GraphFromXMLParser::parseUndirectedEdge(std::deque<sax::Token>::i
 int GraphFromXMLParser::parseValue(std::deque<sax::Token>::iterator& input) {
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, "value");
 
-	int value = std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER));
+	int value = std::from_string < int > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER));
 
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, "value");
 	return value;
diff --git a/alib2data/src/graph/common/GraphToXMLComposer.h b/alib2data/src/graph/common/GraphToXMLComposer.h
index 1de2a37aabd72c302b2ea291b7e916329735ada2..c55bc1d643b8c7f4cd3ab28f89fbab7535ab4d61 100644
--- a/alib2data/src/graph/common/GraphToXMLComposer.h
+++ b/alib2data/src/graph/common/GraphToXMLComposer.h
@@ -51,7 +51,7 @@ void GraphToXMLComposer::composeNodeValues(std::deque<sax::Token> &out, const T
 	for (auto i : graph.nodeValues) {
 		composeNode(out, i.first);
 		out.emplace_back("value", sax::Token::TokenType::START_ELEMENT);
-		out.emplace_back(std::itos(i.second), sax::Token::TokenType::CHARACTER);
+		out.emplace_back(std::to_string(i.second), sax::Token::TokenType::CHARACTER);
 		out.emplace_back("value", sax::Token::TokenType::END_ELEMENT);
 	}
 	out.emplace_back("nodevalues", sax::Token::TokenType::END_ELEMENT);
@@ -63,7 +63,7 @@ void GraphToXMLComposer::composeEdgeValues(std::deque<sax::Token> &out, const T
 	for (auto &i : graph.edgeValues) {
 		composeEdge(out, i.first);
 		out.emplace_back("value", sax::Token::TokenType::START_ELEMENT);
-		out.emplace_back(std::itos(i.second), sax::Token::TokenType::CHARACTER);
+		out.emplace_back(std::to_string(i.second), sax::Token::TokenType::CHARACTER);
 		out.emplace_back("value", sax::Token::TokenType::END_ELEMENT);
 	}
 	out.emplace_back("edgevalues", sax::Token::TokenType::END_ELEMENT);
diff --git a/alib2data/src/label/HexavigesimalLabel.cpp b/alib2data/src/label/HexavigesimalLabel.cpp
index ce6e0c7626c5a2d4e0755912d7d097f3431de262..bddec7ee686e93ff2c1e76a14d1f7a0f198a610e 100644
--- a/alib2data/src/label/HexavigesimalLabel.cpp
+++ b/alib2data/src/label/HexavigesimalLabel.cpp
@@ -47,14 +47,14 @@ HexavigesimalLabel::operator std::string() const {
 
 HexavigesimalLabel HexavigesimalLabel::parse(std::deque<sax::Token>::iterator& input) {
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, HexavigesimalLabel::getXmlTagName());
-	HexavigesimalLabel data(std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)));
+	HexavigesimalLabel data(std::from_string < int > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)));
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, HexavigesimalLabel::getXmlTagName());
 	return data;
 }
 
 void HexavigesimalLabel::compose(std::deque<sax::Token>& out) const {
 	out.emplace_back(HexavigesimalLabel::getXmlTagName(), sax::Token::TokenType::START_ELEMENT);
-	out.emplace_back(std::itos(hexavigesimal), sax::Token::TokenType::CHARACTER);
+	out.emplace_back(std::to_string(hexavigesimal), sax::Token::TokenType::CHARACTER);
 	out.emplace_back(HexavigesimalLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
diff --git a/alib2data/src/primitive/Integer.cpp b/alib2data/src/primitive/Integer.cpp
index 323d30d8b38d5d888187296056b2eb116d9a6799..6a8975c07f3a2a2de5f3ac79f1401ce78953c831 100644
--- a/alib2data/src/primitive/Integer.cpp
+++ b/alib2data/src/primitive/Integer.cpp
@@ -50,7 +50,7 @@ Integer Integer::parse(std::deque<sax::Token>::iterator& input) {
 
 int Integer::parseRaw(std::deque<sax::Token>::iterator& input) {
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, Integer::getXmlTagName());
-	int data = std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER));
+	int data = std::from_string < int > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER));
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, Integer::getXmlTagName());
 	return data;
 }
@@ -61,7 +61,7 @@ void Integer::compose(std::deque<sax::Token>& out) const {
 
 void Integer::compose(std::deque<sax::Token>& out, int primitive) {
 	out.emplace_back(Integer::getXmlTagName(), sax::Token::TokenType::START_ELEMENT);
-	out.emplace_back(std::itos(primitive), sax::Token::TokenType::CHARACTER);
+	out.emplace_back(std::to_string(primitive), sax::Token::TokenType::CHARACTER);
 	out.emplace_back(Integer::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
diff --git a/alib2data/src/primitive/Unsigned.cpp b/alib2data/src/primitive/Unsigned.cpp
index a37f7745056fc8fdd9e266a5ed1b1a0202c9723b..1b1b8eb2097072c08a4d3cb09f789be8188c93ff 100644
--- a/alib2data/src/primitive/Unsigned.cpp
+++ b/alib2data/src/primitive/Unsigned.cpp
@@ -50,7 +50,7 @@ Unsigned Unsigned::parse(std::deque<sax::Token>::iterator& input) {
 
 unsigned Unsigned::parseRaw(std::deque<sax::Token>::iterator& input) {
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, Unsigned::getXmlTagName());
-	unsigned data = std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER));
+	unsigned data = std::from_string < unsigned > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER));
 	sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, Unsigned::getXmlTagName());
 	return data;
 }
@@ -61,7 +61,7 @@ void Unsigned::compose(std::deque<sax::Token>& out) const {
 
 void Unsigned::compose(std::deque<sax::Token>& out, unsigned primitive) {
 	out.emplace_back(Unsigned::getXmlTagName(), sax::Token::TokenType::START_ELEMENT);
-	out.emplace_back(std::itos(primitive), sax::Token::TokenType::CHARACTER);
+	out.emplace_back(std::to_string(primitive), sax::Token::TokenType::CHARACTER);
 	out.emplace_back(Unsigned::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp
index 044d3531a0e9fb3065409c07a4ee04b8b86f630b..9979ac7d81507eaefff718223175e48c5f80858c 100644
--- a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp
+++ b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp
@@ -60,7 +60,7 @@ void MeasurementProvisionerConfigurationXml::parseEnvironment ( MeasurementProvi
 			sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ELEMENT, WORKING_DIRECTORY_TAG );
 		} else if ( data == PIPELINE_ITERATIONS_TAG ) {
 			sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ELEMENT, PIPELINE_ITERATIONS_TAG );
-			mpc.environment.pipelineIterations = std::stoi ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) );
+			mpc.environment.pipelineIterations = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) );
 			sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ELEMENT, PIPELINE_ITERATIONS_TAG );
 		} else {
 			break;
@@ -152,10 +152,10 @@ MPCInputDatum MeasurementProvisionerConfigurationXml::parseInputDatum ( const st
 		sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ATTRIBUTE, attrName );
 
 		if ( attrName == INPUT_DATA_ATTR_ID_NAME ) {
-			mpcid.id = std::stoi ( attrVal );
+			mpcid.id = std::from_string < int > ( attrVal );
 			foundId	 = true;
 		} else if ( attrName == INPUT_DATA_ATTR_COUNT_NAME ) {
-			mpcid.count = std::stoi ( attrVal );
+			mpcid.count = std::from_string < int > ( attrVal );
 		} else if ( attrName == INPUT_DATA_ATTR_ALIAS_NAME ) {
 			mpcid.alias = std::move ( attrVal );
 		} else {
diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp b/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp
index 1b6be258ae65e77fde1ab22456c30d778653d749..688e5aad129326c0f97617ad067d8cae2df8b8b2 100644
--- a/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp
+++ b/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp
@@ -166,7 +166,7 @@ void MeasurementProvisionerResultsXml::parseInputs ( MPRInputResult & mprir, std
 
 		sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ATTRIBUTE, idAttr );
 
-		int id = stoi ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) );
+		int id = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) );
 
 		sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ATTRIBUTE, idAttr );
 
@@ -229,7 +229,7 @@ void MeasurementProvisionerResultsXml::parsePipelineStatus ( MPRPipelineResult &
 
 		if ( data == EXIT_CODE_TAG ) {
 			sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ELEMENT, EXIT_CODE_TAG );
-			mprpr.pipelineStatus.exitCode = stoi ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) );
+			mprpr.pipelineStatus.exitCode = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) );
 			sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ELEMENT, EXIT_CODE_TAG );
 		} else if ( data == ERROR_ORIGIN_TAG ) {
 			sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ELEMENT, ERROR_ORIGIN_TAG );
diff --git a/alib2std/src/extensions/string.cpp b/alib2std/src/extensions/string.cpp
index 0301978eb8840b354b896aee884425ce7567a184..933e146cdae557b2eaadc5b2d72e168b806bc9a3 100644
--- a/alib2std/src/extensions/string.cpp
+++ b/alib2std/src/extensions/string.cpp
@@ -11,26 +11,24 @@
 
 namespace std {
 
-string itos ( int integer, int ) {
-	stringstream ss;
-
-	ss << integer;
-	return ss.str ( );
+template < >
+string to_string ( const string & value ) {
+	return value;
 }
 
-unsigned stou ( const std::string & string, int ) {
-	stringstream ss ( string );
-	unsigned integer;
-
-	ss >> integer;
-	return integer;
+template < >
+string from_string ( const string & value ) {
+	return value;
 }
 
-string utos ( unsigned integer, int ) {
-	stringstream ss;
+template < >
+int from_string ( const string & value ) {
+	return stoi__private ( value.c_str() );
+}
 
-	ss << integer;
-	return ss.str ( );
+template < >
+unsigned from_string ( const string & value ) {
+	return stoul__private ( value.c_str() );
 }
 
 string cstringToString ( char * param ) {
diff --git a/alib2std/src/extensions/string.hpp b/alib2std/src/extensions/string.hpp
index 72e07e958abd532d550e5f991529c4467479c779..05f2d6792b0d8e5b944efc6e94a638a0ffc60c9c 100644
--- a/alib2std/src/extensions/string.hpp
+++ b/alib2std/src/extensions/string.hpp
@@ -10,11 +10,21 @@
 
 namespace std {
 
-string itos ( int integer, int base = 10 );
+template<typename... Ts>
+using to_string_type = auto(Ts...) -> decltype(to_string__private(std::declval<Ts>()...));
 
-unsigned stou ( const std::string &, int base = 10 );
+template < typename T, typename std::enable_if < std::is_function< to_string_type < T > >::value >::type* = nullptr >
+string to_string ( T value ) {
+	return to_string__private ( value );
+}
 
-string utos ( unsigned integer, int base = 10 );
+template < typename T, typename std::enable_if < std::is_constructible < string, T >::value >::type* = nullptr >
+string to_string ( const T & value ) {
+	return (string) value;
+}
+
+template < typename T >
+T from_string ( const string & value );
 
 template < >
 struct compare < string > {
diff --git a/alib2std/src/string b/alib2std/src/string
index 737c6d10831df3ccaec73965155f0277306ce92e..a1276e288115908011303b1497d10261d9262d29 100644
--- a/alib2std/src/string
+++ b/alib2std/src/string
@@ -1,7 +1,20 @@
 #ifndef __STRING_HEADER_WRAPPER_
 #define __STRING_HEADER_WRAPPER_
 
+#define stoi stoi__private
+#define stol stol__private
+#define stoul stoul__private
+#define stoull stoull__private
+#define to_string to_string__private
+
 #include <bits/../string>
+
+#undef stoi
+#undef stol
+#undef stoul
+#undef stoull
+#undef to_string
+
 #include "compare"
 #include "extensions/string.hpp"
 
diff --git a/alib2std/test-src/extensions/StringTest.cpp b/alib2std/test-src/extensions/StringTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8f0145c4862e2fd387237a6135fcf10a558464c6
--- /dev/null
+++ b/alib2std/test-src/extensions/StringTest.cpp
@@ -0,0 +1,22 @@
+#include "StringTest.h"
+#include <random>
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( StringTest, "bits" );
+CPPUNIT_TEST_SUITE_REGISTRATION( StringTest );
+
+void StringTest::setUp() {
+}
+
+void StringTest::tearDown() {
+}
+
+void StringTest::testToString() {
+	CPPUNIT_ASSERT ( std::is_function< std::to_string_type < int > >::value );
+	CPPUNIT_ASSERT ( std::to_string ( std::string ( "1" ) ) == "1" );
+	CPPUNIT_ASSERT ( std::to_string ( 1 ) == "1" );
+	CPPUNIT_ASSERT ( std::to_string ( 1ul ) == "1" );
+
+	StringTest::A a;
+	CPPUNIT_ASSERT ( std::to_string ( a ) == "" );
+}
+
diff --git a/alib2std/test-src/extensions/StringTest.h b/alib2std/test-src/extensions/StringTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..b74cd437f57fe56359e186fd2019e001a94816e0
--- /dev/null
+++ b/alib2std/test-src/extensions/StringTest.h
@@ -0,0 +1,26 @@
+#ifndef RANDOM_TEST_H_
+#define RANDOM_TEST_H_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class StringTest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( StringTest );
+  CPPUNIT_TEST( testToString );
+  CPPUNIT_TEST_SUITE_END();
+
+  class A {
+  public:
+    explicit operator std::string ( ) const {
+      return "";
+    }
+  };
+
+public:
+  void setUp();
+  void tearDown();
+
+  void testToString();
+};
+
+#endif  // RANDOM_TEST_H_
diff --git a/alib2str/src/graph/GraphFromStringParser.cpp b/alib2str/src/graph/GraphFromStringParser.cpp
index b27259062ed331297d79eb977e919cea9e8a1d6f..1936dae457dee4857d7cb7082ed13a99ec9869a9 100644
--- a/alib2str/src/graph/GraphFromStringParser.cpp
+++ b/alib2str/src/graph/GraphFromStringParser.cpp
@@ -223,7 +223,7 @@ int GraphFromStringParser::parseValue(std::istream &input) const
 		throw exception::CommonException("Invalid input. Expected INTEGER");
 	}
 
-	return std::stoi(token.value);
+	return std::from_string < int > (token.value);
 }
 
 template<typename T>
diff --git a/alib2str/src/primitive/PrimitiveFromStringParser.cpp b/alib2str/src/primitive/PrimitiveFromStringParser.cpp
index ac0625f4790b25286dbdda8ba611ea205649c8c9..7cc79dc0a2db39ad9cbdd6f8873bb390f4bc78dd 100644
--- a/alib2str/src/primitive/PrimitiveFromStringParser.cpp
+++ b/alib2str/src/primitive/PrimitiveFromStringParser.cpp
@@ -31,7 +31,7 @@ Primitive PrimitiveFromStringParser::parsePrimitive(std::istream& input, const s
 		return Primitive(Character(token.value[0]));
 	case PrimitiveFromStringLexer::TokenType::INTEGER:
 		if(!features.count(FEATURES::INTEGER)) throw exception::CommonException("Disabled formalism Integer");
-		return Primitive(Integer(std::stoi(token.value)));
+		return Primitive(Integer(std::from_string < int > (token.value)));
 	case PrimitiveFromStringLexer::TokenType::ERROR:
 		break;
 	}
diff --git a/alib2str/src/tree/TreeFromStringParser.cpp b/alib2str/src/tree/TreeFromStringParser.cpp
index d6688a0f889855bb578fcb50e325412a4e7aa5bc..8c5d6124dae0473f08fd71ff72c2c305407385b5 100644
--- a/alib2str/src/tree/TreeFromStringParser.cpp
+++ b/alib2str/src/tree/TreeFromStringParser.cpp
@@ -55,7 +55,7 @@ Tree TreeFromStringParser::parseTree ( std::istream & input, const std::set < FE
 		if ( token.type == TreeFromStringLexer::TokenType::RANK ) {
 			std::set < alphabet::RankedSymbol > nonlinearVariables;
 
-			rank = std::stou ( token.value );
+			rank = std::from_string < unsigned > ( token.value );
 
 			std::vector < std::smart_ptr < tree::RankedNode > > childs;
 			bool isPattern = false;
@@ -136,7 +136,7 @@ tree::RankedNode TreeFromStringParser::parseRankedContent ( std::istream & input
 		TreeFromStringLexer::Token token = m_TreeLexer.next ( input );
 
 		if ( token.type == TreeFromStringLexer::TokenType::RANK )
-			rank = std::stou ( token.value );
+			rank = std::from_string < unsigned > ( token.value );
 		else
 			throw exception::CommonException ( "Missing rank" );
 
diff --git a/alib2str/src/tree/TreeToStringComposer.cpp b/alib2str/src/tree/TreeToStringComposer.cpp
index c496990673f491cc8ef44b1fdd77c9322f27fd2c..4defa6749e52fc42fd746f4d0f6025c53bd79224 100644
--- a/alib2str/src/tree/TreeToStringComposer.cpp
+++ b/alib2str/src/tree/TreeToStringComposer.cpp
@@ -24,7 +24,7 @@ TreeToStringComposer::RegistratorWrapper < void, RankedTree > StringToStringComp
 void TreeToStringComposer::compose ( std::ostream & out, const RankedNode & node ) {
 	alib::stringApi < alphabet::Symbol >::compose ( out, node.getSymbol ( ).getSymbol ( ) );
 
-	out << std::utos ( node.getSymbol ( ).getRank ( ).getData ( ) );
+	out << std::to_string ( node.getSymbol ( ).getRank ( ).getData ( ) );
 
 	for ( const std::smart_ptr < const RankedNode > & child : node.getChildren ( ) ) {
 		out << " ";
@@ -44,7 +44,7 @@ void TreeToStringComposer::compose ( std::ostream & out, const alphabet::RankedS
 	} else {
 		alib::stringApi < alphabet::Symbol >::compose ( out, node.getSymbol ( ).getSymbol ( ) );
 
-		out << std::utos ( node.getSymbol ( ).getRank ( ).getData ( ) );
+		out << std::to_string ( node.getSymbol ( ).getRank ( ).getData ( ) );
 
 		for ( const std::smart_ptr < const RankedNode > & child : node.getChildren ( ) ) {
 			out << " ";