diff --git a/appointment-import/pom.xml b/appointment-import/pom.xml
index d1022957a5e69e7f4f44fd69f5d63c9751999fcf..a2244ee9c27fc393f0190108de420b7cb272a67c 100644
--- a/appointment-import/pom.xml
+++ b/appointment-import/pom.xml
@@ -30,6 +30,11 @@
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>3.15</version>
+</dependency>
+<dependency>
+    <groupId>commons-cli</groupId>
+    <artifactId>commons-cli</artifactId>
+    <version>1.3.1</version>
 </dependency>    
   </dependencies>
   
diff --git a/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java b/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..4f129832054eefadc935163d11100d35cbf9e3e5
--- /dev/null
+++ b/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java
@@ -0,0 +1,29 @@
+package smash.appointment.parse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AppointmentDao {
+	private List<AppointmentEntry> appointments = new ArrayList<>();
+
+	public void addAppointments(List<AppointmentEntry> appointmentsToAdd) {
+		appointments.addAll(appointmentsToAdd);
+	}
+
+	/**
+	 * @return the appointments
+	 * @see #appointments
+	 */
+	public List<AppointmentEntry> getAppointments() {
+		return appointments;
+	}
+
+	/**
+	 * @param appointments the appointments to set
+	 * @see #appointments
+	 */
+	public void setAppointments(List<AppointmentEntry> appointments) {
+		this.appointments = appointments;
+	}
+
+}
diff --git a/appointment-import/src/main/java/smash/appointment/parse/Main.java b/appointment-import/src/main/java/smash/appointment/parse/Main.java
index 051de5b0c3a5f0019c10fa02654ccf525a684f75..18cbe74c96ac30c6d27724c98ec29dde8f4d43f1 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/Main.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/Main.java
@@ -2,26 +2,63 @@ package smash.appointment.parse;
 
 import java.util.List;
 
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
 import org.apache.log4j.Logger;
 
 public class Main {
-	private static Logger logger = Logger.getLogger(Main.class);
+	private static Logger	logger				 = Logger.getLogger(Main.class);
 
-	public static void main(String[] args) throws Exception {
-		if (args.length < 2) {
-			System.out.println("Usage: command <agenda.xlsx> <subjects.txt>");
-		} else {
-			SubjectDao subjectDao = new SubjectDao();
-			subjectDao.readFile(args[1]);
-
-			XlsxCalendarProcessor processor = new XlsxCalendarProcessor();
-			processor.setSubjectDao(subjectDao);
-
-			List<AppointmentEntry> entries = processor.processExcel(args[0]);
-			for (AppointmentEntry appointmentEntry : entries) {
-				logger.debug(appointmentEntry);
-			}
+	SubjectDao						subjectDao		 = new SubjectDao();
+	AppointmentDao				appointmentDao = new AppointmentDao();
+
+	public void run(String[] args) throws Exception {
+
+		Options options = new Options();
+		Option agenda = Option.builder().required().argName("file").hasArg().desc("PRC agenda").longOpt("agenda").build();
+		Option subjects = Option.builder().required().argName("file").hasArg().desc("PRC subjects").longOpt("subjects").build();
+		options.addOption(agenda);
+		options.addOption(subjects);
+
+		CommandLineParser parser = new DefaultParser();
+		try {
+			CommandLine line = parser.parse(options, args);
+
+			String subjectsFile = line.getOptionValue("subjects");
+			subjectDao.addSubjects(processPrcSubjects(subjectsFile));
+
+			String agendaFile = line.getOptionValue("agenda");
+			appointmentDao.addAppointments(processPrcAppointments(agendaFile));
+
+		} catch (ParseException exp) {
+			HelpFormatter formatter = new HelpFormatter();
+			formatter.printHelp( "java -jar file.jar", options );
+		}
+	}
+
+	private List<AppointmentEntry> processPrcAppointments(String agendaFile) throws Exception {
+		XlsxCalendarProcessor processor = new XlsxCalendarProcessor();
+		processor.setSubjectDao(subjectDao);
+		List<AppointmentEntry> entries = processor.processExcel(agendaFile);
+
+		for (AppointmentEntry appointmentEntry : entries) {
+			logger.debug(appointmentEntry);
 		}
+		return entries;
+	}
+
+	public static void main(String[] args) throws Exception {
+		new Main().run(args);
+	}
+
+	private List<Subject> processPrcSubjects(String subjectsFile) throws Exception {
+		PrcSubjectsParser parser = new PrcSubjectsParser();
+		return parser.processExcel(subjectsFile);
 	}
 
 }
diff --git a/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java b/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java
index 682133cacd3c7af0a39d4baecb8cc25b9edcb6be..4aa696d6bf468d185ef89d8dd9bc0513a64896be 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java
@@ -49,4 +49,10 @@ public class SubjectDao {
 		return null;
 	}
 
+	public void addSubjects(List<Subject> processPrcSubjects) {
+		for (Subject subject : processPrcSubjects) {
+			addSubject(subject);
+		}
+	}
+
 }