//TODO: convert protocol option to lowercase
 
-            Services.push_back(create_service(protocol,host,login,password));
+            ServicePtr service = create_service(protocol,host,login,password);
+            if ( service != NULL )
+            {
+                Services.push_back(service);
+            }
         }
         else
         {
     }
     else
     {
-        // TODO: error handling for unknown protocol
+        cout << "Could not find specified protocol: " << protocol << endl;
+        ServicePtr service;
+        return service;
     }
 }
 
                             if(vm.count("service.protocol") && vm.count("service.host") && vm.count("service.login") && vm.count("service.password"))
                             {
                                 // create the corresponding service
-                                Services.push_back(create_service(vm["service.protocol"].as<string>(),vm["service.host"].as<string>(),vm["service.login"].as<string>(),vm["service.password"].as<string>()));
+                                string protocol = vm["service.protocol"].as<string>();
+                                string host = vm["service.host"].as<string>();
+                                string login = vm["service.login"].as<string>();
+                                string password = vm["service.password"].as<string>();
+
+                                // TODO: convert protocol to lowercase
+                                protocol = tolower(protocol.c_str());
+
+                                ServicePtr service = create_service(protocol,host,login,password);
+                                if ( service != NULL )
+                                {
+                                    Services.push_back(service);
+                                }
                             }
                         }
                         catch ( po::unknown_option e )