diff --git a/alib2cli/src/builtin/ReadFile.cpp b/alib2cli/src/builtin/ReadFile.cpp
index 605b0a67e1cc56e7e0f6ca9b4d5c78c33d9b0512..a9e45bf7a9a245301011edf1d2b0bf3062ba1c01 100644
--- a/alib2cli/src/builtin/ReadFile.cpp
+++ b/alib2cli/src/builtin/ReadFile.cpp
@@ -14,9 +14,15 @@ namespace cli {
 
 namespace builtin {
 
-std::string ReadFile::read ( const std::string & data ) {
-	std::ifstream t ( data );
-	return std::string ( ( std::istreambuf_iterator < char > ( t ) ), std::istreambuf_iterator < char > ( ) );
+std::string ReadFile::read ( const std::string & filename ) {
+	if ( filename == "-" ) {
+		std::cin >> std::noskipws;
+		return std::string ( ( std::istreambuf_iterator < char > ( std::cin ) ), std::istreambuf_iterator < char > ( ) );
+	} else {
+		std::ifstream t ( filename );
+		t >> std::noskipws;
+		return std::string ( ( std::istreambuf_iterator < char > ( t ) ), std::istreambuf_iterator < char > ( ) );
+	}
 }
 
 auto ReadFileString = registration::AbstractRegister < ReadFile, std::string, const std::string & > ( ReadFile::read );
diff --git a/alib2cli/src/builtin/WriteFile.cpp b/alib2cli/src/builtin/WriteFile.cpp
index 88761ff055174603c85fc5af725bd525f3ed162d..e17baf974fc51505c623790a39a5fe457986d80e 100644
--- a/alib2cli/src/builtin/WriteFile.cpp
+++ b/alib2cli/src/builtin/WriteFile.cpp
@@ -14,7 +14,10 @@ namespace cli {
 namespace builtin {
 
 void WriteFile::write ( const std::string & filename, const std::string & data ) {
-	std::ofstream ( filename ) << data;
+	if ( filename == "-" )
+		std::cout << data;
+	else
+		std::ofstream ( filename ) << data;
 }
 
 auto WriteFileString = registration::AbstractRegister < WriteFile, void, const std::string &, const std::string & > ( WriteFile::write );