diff --git a/main.cpp b/main.cpp
index 02ad674..24c698a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,5 +1,7 @@
 #include <iostream>
 #include <vector>
+#include <sstream>
+#include <string>
 #include <curl/curl.h>
 #include "histogram.h"
 #include "text.h"
@@ -35,23 +37,31 @@ Input input_data(istream& stream, bool prompt) {
   return in;
 }
 
+Input
+download(const string& address) {
+    stringstream buffer;
+    CURL *curl = curl_easy_init();
+    if(curl) {
+        CURLcode res;
+        curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+        res = curl_easy_perform(curl);
+        if (res!=CURLE_OK){
+            cerr << curl_easy_strerror(res);
+            exit(1);
+        }
+        curl_easy_cleanup(curl);
+    }
+    return input_data(buffer, false);
+}
+
 int main(int argc, char* argv[])
 {
+    Input input;
     if (argc > 1) {
-        CURL *curl = curl_easy_init();
-        if(curl) {
-            CURLcode res;
-            curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
-            res = curl_easy_perform(curl);
-            if (res!=CURLE_OK){
-                cerr << curl_easy_strerror(res);
-                exit(1);
-            }
-            curl_easy_cleanup(curl);
-        }
-        return 0;
+        input = download(argv[1]);
+    } else {
+        input = input_data(cin, true);
     }
-    Input in = input_data(cin, false);
-    vector<size_t> bins = make_histogram(in.numbers, in.bin_count);
+    const auto bins = make_histogram(input.numbers, input.bin_count);
     show_histogram_svg(bins);
 }