diff --git a/test/urireader.cpp b/test/urireader.cpp
index 3781268c..3dbac293 100644
--- a/test/urireader.cpp
+++ b/test/urireader.cpp
@@ -3,11 +3,10 @@
 
 class URITest : public Util::DataCallback{
 public:
-  int goStdin(bool useCallback = true);
-  int goHTTP(char *, bool useCallback = true);
   void dump(const char *ptr, size_t size);
   size_t wanted = 100000000;
   void dataCallback(const char *ptr, size_t size);
+  int main(int argc, char ** argv);
 };
 
 void URITest::dataCallback(const char *ptr, size_t size){
@@ -18,82 +17,38 @@ void URITest::dump(const char *ptr, size_t size){
   if (fwrite(ptr, sizeof(char), size, stdout) != size){INFO_MSG("error: %s", strerror(errno));}
 }
 
-int URITest::goStdin(bool useCallback){
-  HTTP::URIReader U;
-  HTTP::URL uri;
-  uri.path = "-";
-  U.open(uri);
+int URITest::main(int argc, char **argv){
+  Util::redirectLogsIfNeeded();
+  Util::Config cfg(argv[0]);
+  JSON::Value option;
+  option["arg_num"] = 1;
+  option["arg"] = "string";
+  option["help"] = "Name of the input URI or - for stdin";
+  option["value"].append("-");
+  cfg.addOption("input", option);
+  option.null();
+  option["short"] = "r";
+  option["long"] = "readall";
+  option["help"] = "Read all data all at once in blocking mode";
+  option["value"].append(0);
+  cfg.addOption("readall", option);
+  if (!cfg.parseArgs(argc, argv)){return 1;}
 
-  if (useCallback){
-    MEDIUM_MSG("read from STDIN with callbacks");
-    U.readAll(*this);
-  }else{
-    MEDIUM_MSG("read from STDIN without callbacks");
+  cfg.activate();
+  HTTP::URIReader R(cfg.getString("input"));
+
+  if (cfg.getBool("readall")){
     char *dPtr = 0;
     size_t dLen = 0;
-    U.readAll(dPtr, dLen);
+    R.readAll(dPtr, dLen);
     dump(dPtr, dLen);
-    // INFO_MSG("length: %d", dLen);
-  }
-
-  return 0;
-}
-
-int URITest::goHTTP(char *uri, bool useCallback){
-  HTTP::URIReader d;
-  d.open(uri);
-
-  if (useCallback){
-    MEDIUM_MSG("read file or url with callbacks");
-    // d.readAll(*this);
-
-    while (!d.isEOF()){d.readSome(10486, *this);}
-
   }else{
-    MEDIUM_MSG("read file or url without callbacks");
-    char *dPtr = 0;
-    size_t dLen = 0;
-    d.readAll(dPtr, dLen);
-    dump(dPtr, dLen);
+    while (!R.isEOF() && cfg.is_active){R.readSome(10486, *this);}
   }
-
   return 0;
 }
 
 int main(int argc, char **argv){
-  //  Util::Config::printDebugLevel = 10;
-  Util::Config cfg;
-  cfg.activate();
-
   URITest t;
-
-  if (!isatty(fileno(stdin))){
-    if (argv[1]){
-      t.goStdin(false);
-    }else{
-      t.goStdin();
-    }
-  }else{
-
-    if (argc == 1){
-      std::cout << "no arguments applied!" << std::endl;
-      std::cout << "usage: " << std::endl;
-      std::cout << "STDIN:\t urireader < filename " << std::endl;
-      std::cout << "URL:\t urireader http://url " << std::endl;
-      std::cout << "FILE:\t urireader path_to_file " << std::endl << std::endl;
-      std::cout << "Outputs content to stdout, use ' > outputfile' after the command to write "
-                   "contents to disk"
-                << std::endl
-                << std::endl;
-      return 0;
-    }else{
-      if (argv[2]){
-        t.goHTTP(argv[1], false);
-      }else{
-        t.goHTTP(argv[1]);
-      }
-    }
-  }
-
-  return 0;
+  t.main(argc, argv);
 }