diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/src/Course.java b/src/Course.java
new file mode 100644
index 0000000000000000000000000000000000000000..4cd8b4713a3ac2acba9290934e4a0a1cde7e73ff
--- /dev/null
+++ b/src/Course.java
@@ -0,0 +1,22 @@
+public class Course
+{
+    // most attributes are concrete and can't be changed easily without changing the whole system
+    final private int id;   // PK // FK
+    final private String name;
+    final private BachelorSemester bachelorSemester;
+    final private CourseType courseType;
+    final private double sws;
+    final private int ects;
+    private ExamType examType;
+
+    public Course(int id, String name, BachelorSemester bachelorSemester, CourseType courseType, double sws, int ects, ExamType examType)
+    {
+        this.id = id;
+        this.name = name;
+        this.bachelorSemester = bachelorSemester;
+        this.courseType = courseType;
+        this.sws = sws;
+        this.ects = ects;
+        this.examType = examType;
+    }
+}
diff --git a/src/CourseType.java b/src/CourseType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a65aa228c298eeeb894b6b8e6a3582ec778330a6
--- /dev/null
+++ b/src/CourseType.java
@@ -0,0 +1,7 @@
+public enum CourseType
+{
+    REQUIRED,
+    ELECTIVE,
+    COMPULSORY,
+    PLV,
+}
diff --git a/src/ExamType.java b/src/ExamType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3ca07fc35865684d0bd3a8cce4afd4ae0ecabbe
--- /dev/null
+++ b/src/ExamType.java
@@ -0,0 +1,7 @@
+public enum ExamType
+{
+    WRITTEN,
+    ORAL,
+    RESEARCH_PROJECT,
+    TAKE_HOME;
+}
diff --git a/src/Gender.java b/src/Gender.java
new file mode 100644
index 0000000000000000000000000000000000000000..6cf69eee64195a458ebdd84c66b15e25efa4ccf9
--- /dev/null
+++ b/src/Gender.java
@@ -0,0 +1,6 @@
+public enum Gender
+{
+    MALE,
+    FEMALE,
+    OTHER;
+}
diff --git a/src/Lecturer.java b/src/Lecturer.java
new file mode 100644
index 0000000000000000000000000000000000000000..db7a49a4a59e97920f4ef339324825ad789f1780
--- /dev/null
+++ b/src/Lecturer.java
@@ -0,0 +1,14 @@
+public class Lecturer extends Person
+{
+    public Lecturer(int id, String firstName, String lastName, String placeOfResidence, String birthPlace,
+                    String officialEmail, String privateEmail, boolean isSignedUp, Gender gender, Status status)
+    {
+        super(id, firstName, lastName, placeOfResidence, birthPlace,
+                officialEmail, privateEmail, isSignedUp, gender, status);
+    }
+
+    public void setGrades()
+    {
+
+    }
+}
diff --git a/src/Person.java b/src/Person.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e1b1b67f22c258171eac855b63e61da783de1f1
--- /dev/null
+++ b/src/Person.java
@@ -0,0 +1,40 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Person
+{
+    final private int id; // final for the ID because it will remain the same for the whole duration of studying or being employed
+    private Status status;
+    private Gender gender;
+    private String firstName;
+    private String lastName;
+    private String placeOfResidence;
+    private String birthPlace;
+    private String officialEmail;
+    private String privateEmail;
+    private List<Course> personalCourses = new ArrayList<>();
+    private boolean isSignedUp;
+
+    public Person(int id, String firstName, String lastName, String placeOfResidence, String birthPlace,
+                  String officialEmail, String privateEmail, boolean isSignedUp, Gender gender, Status status)
+    {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.placeOfResidence = placeOfResidence;
+        this.birthPlace = birthPlace;
+        this.officialEmail = officialEmail;
+        this.privateEmail = privateEmail;
+        this.isSignedUp = isSignedUp;
+        this.gender = gender;
+        this.status = status;
+    }
+
+    public boolean SignUpForCourse(Course course)
+    {
+        personalCourses.add(course);
+
+        // return status for registration process: was successful or has failed
+        return isSignedUp;
+    }
+}
diff --git a/src/Status.java b/src/Status.java
new file mode 100644
index 0000000000000000000000000000000000000000..61c694c326cfa99fcd69eff44d74d47c58ebbb22
--- /dev/null
+++ b/src/Status.java
@@ -0,0 +1,6 @@
+public enum Status
+{
+    ENROLLED,
+    ON_LEAVE,
+    EXMATRICULATED;
+}
diff --git a/src/Student.java b/src/Student.java
index c47d0443257cc83032397dc878daef3a9dd39c03..602ff3f2667a2efe9b9d2462278b023e5ac06ab2 100644
--- a/src/Student.java
+++ b/src/Student.java
@@ -1,16 +1,28 @@
 import java.util.List;
 
-public class Student
+public class Student extends Person
 {
-    private int id;
+    // no static because variables don't make any sense without the created object
+    private boolean paidFees;
+    private List<Double> grades;
     // CourseOfStudy
+    private BachelorSemester bachelorSemester;
+    private BachelorDegree bachelorDegree;
 
-    public BachelorSemester bachelorSemester;
-    public BachelorDegree bachelorDegree;
-    private List<Double> grades;
+    public Student(int id, String firstName, String lastName, String placeOfResidence, String birthPlace,
+                   String officialEmail, String privateEmail, boolean isSignedUp, Gender gender, Status status,
+                   boolean paidFess, List<Double> grades, BachelorSemester bachelorSemester, BachelorDegree bachelorDegree)
+    {
+        super(id, firstName, lastName, placeOfResidence, birthPlace,
+                officialEmail, privateEmail, isSignedUp, gender, status);
+        this.paidFees = paidFess;
+        this.grades = grades;
+        this.bachelorSemester = bachelorSemester;
+        this.bachelorDegree = bachelorDegree;
+    }
 
     public List<Double> GetGrades()
     {
-       return grades;
+        return grades;
     }
 }
\ No newline at end of file