diff --git a/aconversions2/src/aconversion.cpp b/aconversions2/src/aconversion.cpp
index 664821f562e36ce83b42161fdd2c2cf4e788203a..cccc2e9902738826cd0853691ec6a10db77d203d 100644
--- a/aconversions2/src/aconversion.cpp
+++ b/aconversions2/src/aconversion.cpp
@@ -124,7 +124,7 @@ int main(int argc, char* argv[])
 		std::string input( istreambuf_iterator<char>( cin ), ( istreambuf_iterator<char>( ) ) );
 		SaxParseInterface::parseMemory( input, tokens );
 
-		if(alib::api<exception::AlibException>::first(tokens)) throw alib::api<exception::AlibException>::parse(tokens);
+		if(alib::api<exception::AlibException>::first(tokens)) throw alib::DataFactory::fromTokens<exception::AlibException>(tokens);
 
 		ConversionHandler conv( tokens, target, algorithm, cout );
 		conv.convert( );
diff --git a/aderivation2/src/aderivation.cpp b/aderivation2/src/aderivation.cpp
index bd08316c486a00befec86724f9f45f03b66bfc61..c1bfb1bb9222884affce4424764398406039bfe1 100644
--- a/aderivation2/src/aderivation.cpp
+++ b/aderivation2/src/aderivation.cpp
@@ -30,6 +30,8 @@ int main(int argc, char** argv) {
 			} else {
 				sax::SaxParseInterface::parseFile(string.getValue(), stringTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(stringTokens);
 		}
 
 		std::list<sax::Token> regexpTokens;
@@ -39,14 +41,12 @@ int main(int argc, char** argv) {
 			} else {
 				sax::SaxParseInterface::parseFile(regexp.getValue(), regexpTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(regexpTokens);
 		}
 
-		{
-			regexp::RegExp regexp = alib::DataFactory::fromTokens<regexp::RegExp>(regexpTokens);
-			string::LinearString string = alib::DataFactory::fromTokens<string::LinearString>(stringTokens);
-			alib::DataFactory::toStdout(regexp::RegExpDerivation::derivation(regexp, string));
-			return 0;
-		}
+		alib::DataFactory::toStdout(regexp::RegExpDerivation::derivation(alib::DataFactory::fromTokens<regexp::RegExp>(regexpTokens), alib::DataFactory::fromTokens<string::LinearString>(stringTokens)));
+		return 0;
 	} catch(const exception::AlibException& exception) {
 		alib::DataFactory::toStdout(exception);
 		return 1;
diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp
index 24bd0e23d93141dd673ffd2a68309bbe392e6399..49b0d77c53ffa0e48f57fe67483876ed60bc41b4 100644
--- a/adeterminize2/src/adeterminize.cpp
+++ b/adeterminize2/src/adeterminize.cpp
@@ -37,6 +37,9 @@ int main(int argc, char** argv) {
 	} catch (const exception::AlibException& e) {
 		alib::DataFactory::toStdout(e);
 		return 1;
+	} catch(const TCLAP::ArgException& exception) {
+		std::cout << exception.error() << std::endl;
+		return 2;
 	} catch (...) {
 		return 127;
 	}
diff --git a/adiff2/src/adiff.cpp b/adiff2/src/adiff.cpp
index 7a64bae4df8b0c74ad181e8a6a5cdf6baaddaf5f..3e63c36f187531dde09ea8f2ed832d8bc2d265bb 100644
--- a/adiff2/src/adiff.cpp
+++ b/adiff2/src/adiff.cpp
@@ -34,6 +34,8 @@ int main(int argc, char** argv) {
 			} else {
 				sax::SaxParseInterface::parseFile(input1.getValue(), tokens1);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(tokens1);
 		}
 
 		std::list<sax::Token> tokens2;
@@ -43,6 +45,8 @@ int main(int argc, char** argv) {
 			} else {
 				sax::SaxParseInterface::parseFile(input2.getValue(), tokens2);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(tokens2);
 		}
 
 		if (tokens1.empty() || tokens2.empty())
@@ -64,8 +68,8 @@ int main(int argc, char** argv) {
 
 		std::cout << "Only automata and grammars can be differenciated." << std::endl;
 
-		if(alib::api<exception::AlibException>::first(tokens1)) std::cout << alib::api<exception::AlibException>::parse(tokens1).getCause() << std::endl;
-		if(alib::api<exception::AlibException>::first(tokens2)) std::cout << alib::api<exception::AlibException>::parse(tokens2).getCause() << std::endl;
+		if(alib::api<exception::AlibException>::first(tokens1)) std::cout << alib::DataFactory::fromTokens<exception::AlibException>(tokens1).getCause() << std::endl;
+		if(alib::api<exception::AlibException>::first(tokens2)) std::cout << alib::DataFactory::fromTokens<exception::AlibException>(tokens2).getCause() << std::endl;
 
 		return 2;
 	} catch (const exception::AlibException& e) {
diff --git a/aintegral2/src/aintegral.cpp b/aintegral2/src/aintegral.cpp
index 2af07d69b8db819e8b4814331435ce308cdc8642..dd2d74e696a68a7cee3682d451c4916be54deb9d 100644
--- a/aintegral2/src/aintegral.cpp
+++ b/aintegral2/src/aintegral.cpp
@@ -30,6 +30,8 @@ int main(int argc, char** argv) {
 			} else {
 				sax::SaxParseInterface::parseFile(string.getValue(), stringTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(stringTokens);
 		}
 
 		std::list<sax::Token> regexpTokens;
@@ -39,14 +41,12 @@ int main(int argc, char** argv) {
 			} else {
 				sax::SaxParseInterface::parseFile(regexp.getValue(), regexpTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(regexpTokens);
 		}
 
-		{
-			regexp::RegExp regexp = alib::DataFactory::fromTokens<regexp::RegExp>(regexpTokens);
-			string::LinearString string = alib::DataFactory::fromTokens<string::LinearString>(stringTokens);
-			alib::DataFactory::toStdout(regexp::RegExpIntegral::integral(regexp, string));
-			return 0;
-		}
+		alib::DataFactory::toStdout(regexp::RegExpIntegral::integral(alib::DataFactory::fromTokens<regexp::RegExp>(regexpTokens), alib::DataFactory::fromTokens<string::LinearString>(stringTokens)));
+		return 0;
 	} catch(const exception::AlibException& exception) {
 		alib::DataFactory::toStdout(exception);
 		return 1;
diff --git a/arun2/src/arun.cpp b/arun2/src/arun.cpp
index 20660413f8a9299b3f20c45bd28b44a0fcabb496..dfe6c9d39d3b8db14fe0b17226e181ca32872259 100644
--- a/arun2/src/arun.cpp
+++ b/arun2/src/arun.cpp
@@ -42,6 +42,8 @@ int main(int argc, char* argv[]) {
 			} else {
 				sax::SaxParseInterface::parseFile(input.getValue(), inputTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(inputTokens);
 		}
 
 		std::list<sax::Token> automatonTokens;
@@ -51,6 +53,8 @@ int main(int argc, char* argv[]) {
 			} else {
 				sax::SaxParseInterface::parseFile(automaton.getValue(), automatonTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(automatonTokens);
 		}
 
 		if( type.getValue() == "occurrences") {
diff --git a/astat2/src/astat.cpp b/astat2/src/astat.cpp
index e9973ffc02c170f75b49e41ca106b5103c00a68c..3b2dffd0843c8e15ad569ece6f5be44238ccd945 100644
--- a/astat2/src/astat.cpp
+++ b/astat2/src/astat.cpp
@@ -109,7 +109,11 @@ int main(int argc, char* argv[]) {
 
 		std::list<sax::Token> tokens;
 		if(file.isSet()) {
-			sax::SaxParseInterface::parseFile(file.getValue(), tokens);
+			if(file.getValue() == "-") {
+				sax::SaxParseInterface::parseStdin(tokens);
+			} else {
+				sax::SaxParseInterface::parseFile(file.getValue(), tokens);
+			}
 		} else {
 			sax::SaxParseInterface::parseStdin(tokens);
 		}
diff --git a/astringology2/src/astringology.cpp b/astringology2/src/astringology.cpp
index 4f1a2ce66cea301e86ee15a5c1dc9de48fba6872..35c67edbabe602fb7c480c0096ceeaecb91e379b 100644
--- a/astringology2/src/astringology.cpp
+++ b/astringology2/src/astringology.cpp
@@ -42,6 +42,8 @@ int main(int argc, char* argv[]) {
 			} else {
 				sax::SaxParseInterface::parseFile(subject.getValue(), subjectTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(subjectTokens);
 		}
 
 		std::list<sax::Token> patternTokens;
@@ -51,6 +53,8 @@ int main(int argc, char* argv[]) {
 			} else {
 				sax::SaxParseInterface::parseFile(pattern.getValue(), patternTokens);
 			}
+		} else {
+			sax::SaxParseInterface::parseStdin(patternTokens);
 		}
 
 		if( algorithm.getValue() == "exactMatch") {
diff --git a/makefile b/makefile
index 4a9954870520b700e9ac70c3fbd6d2ab22f67841..901c4a0edf250c93d0a22b740a02601f775ac3d4 100644
--- a/makefile
+++ b/makefile
@@ -21,6 +21,21 @@ SUBDIRS_BINS = acat2 \
 		astringology2 \
 		atrim2 \
 
+
+ifneq (3.81, $(firstword $(sort $(MAKE_VERSION) 3.81)))
+$(error version $(MAKE_VERSION) is not supported. You need at least 3.82 is needed for make to work)
+endif
+
+TCLAP_EXISTS = $(shell g++ -c -o /dev/null -xc++ - <<< \\\#include\ \<tclap/CmdLine.h\> 2>/dev/null; echo $$?)
+ifneq (0, $(TCLAP_EXISTS))
+$(error You need tclap installed)
+endif
+
+TCLAP_EXISTS = $(shell g++ -c -o /dev/null -xc++ - <<< \\\#include\ \<cppunit/Test.h\> 2>/dev/null; echo $$?)
+ifneq (0, $(TCLAP_EXISTS))
+$(error You need tclap installed)
+endif
+
 SUBDIRS_WITH_MAKE = $(dir $(wildcard */makefile))
 
 .PHONY: $(addsuffix .all-debug  , $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))  \
@@ -33,10 +48,6 @@ SUBDIRS_WITH_MAKE = $(dir $(wildcard */makefile))
 	all-release build-release build-test-release unit-test-release clean-release \
 	debug release clean doc all
 
-# ifneq (3.82, $(firstword $(sort $(MAKE_VERSION) 3.81)))
-# 	$(error version at least 3.82 is needed for make to work)
-# endif
-
 all:
 	@echo "What to do master?"