diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
index 9897320c8097e769ee5bc4db40492adc3db84449..35713a55f8fde8abbc3bd86f375c2f3e452c921a 100644
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -81,13 +81,20 @@ class RegisterController extends Controller
         }
     }
 
-    public function registerUser(Request $request) {
-        $data = $request->all();
+    public function registerUser(array $data) {
+
         $username = $data['username'];
+        $email = $data['email'];
         if(User::where('username',$username)->count()>0) {
             echo '<div class="alert alert-warning alert-dismissible fade show text-center">
                     <button type="button" class="close" data-dismiss="alert">&times;</button>
-                    This user <strong>already exist.</strong>
+                    User ' . $username . ' <strong>already exist.</strong>
+                  </div>';
+            return view('auth.register');
+        } else if (User::where('email',$email)->count()>0) {
+            echo '<div class="alert alert-warning alert-dismissible fade show text-center">
+                    <button type="button" class="close" data-dismiss="alert">&times;</button>
+                    User with <strong>email</strong> ' . $email . ' <strong>already exist.</strong>
                   </div>';
             return view('auth.register');
         } else if(strlen($data['username']) > 18){
@@ -102,26 +109,89 @@ class RegisterController extends Controller
                     <strong>Invalid</strong> phone number.
                   </div>';
             return view('auth.register');
-        } else {
-           $user = $this->create($data);
-           $role = $data['role'];
-           if($role == User::ROLE_DOSEN) {
-               Dosen::create(['id'=>$user->id]);
-           }else if($role == User::ROLE_MAHASISWA) {
-               $id_kelas_tesis = KelasTesis::orderByRaw('updated_at - created_at DESC')->first();
-               Mahasiswa::create(['id'=>$user->id, 'id_kelas_tesis'=>$id_kelas_tesis->id]);
-           } else if($role == User::ROLE_MANAJER) {
-               Manajer::create(['id'=>$user->id]);
-           }
-            echo '<div class="alert alert-success alert-dismissible fade show text-center">
+        } else if($data['password'] != $data['password_confirmation']){
+            echo '<div class="alert alert-warning alert-dismissible fade show text-center">
                     <button type="button" class="close" data-dismiss="alert">&times;</button>
-                    <strong>Success !</strong> New user has successfully registered!
+                    <strong>Invalid</strong> password confirmation.
                   </div>';
-           return view('auth.register');
+            return view('auth.register');
+        } else {
+            $user = $this->create($data);
+            $role = $data['role'];
+            if($role == User::ROLE_DOSEN) {
+                Dosen::create(['id'=>$user->id]);
+            } else if ($role == User::ROLE_MAHASISWA) {
+                $id_kelas_tesis = KelasTesis::orderByRaw('updated_at - created_at DESC')->first();
+                if ($id_kelas_tesis == NULL) {
+                    $user->delete();
+                    echo '<div class="alert alert-warning alert-dismissible fade show text-center">
+                            <button type="button" class="close" data-dismiss="alert">&times;</button>
+                            Please create <strong>Kelas Tesis</strong> first.
+                         </div>';
+                    return view('auth.register');
+                } else {
+                    Mahasiswa::create(['id'=>$user->id, 'id_kelas_tesis'=>$id_kelas_tesis->id]);
+                }
+            } else if ($role == User::ROLE_MANAJER) {
+                Manajer::create(['id'=>$user->id]);
+            }
+                echo '<div class="alert alert-success alert-dismissible fade show text-center">
+                        <button type="button" class="close" data-dismiss="alert">&times;</button>
+                        <strong>Success !</strong> New user has successfully registered!
+                    </div>';
+            return view('auth.register');
         }
-//        echo $id;
+    }
 
+    public function massRegister(String $filename, String $role) {
+        $file = fopen($filename, 'r');
 
+        while (($line = fgetcsv($file, 1000, ",")) !== FALSE) {
+            $data['name'] = $line[0];
+            $data['username'] = $line[1];
+            $data['email'] = $line[2];
+            $data['phone'] = $line[3];
+            $data['password'] = $line[4];
+            $data['password_confirmation'] = $line[4];
+            $data['role'] = $role;
+            $this->registerUser($data);
+        }
+        
+        fclose($file);
     }
 
+    public function registerUsers(Request $request) {
+        $data = $request->all();
+
+        if (isset($_FILES["file"])) {
+            $file = $_FILES["file"];
+            //if there was an error uploading the file
+            if ($file["error"] > 0) {
+                echo '<div class="alert alert-success alert-dismissible fade show text-center">
+                        <button type="button" class="close" data-dismiss="alert">&times;</button>
+                        <strong>File Error!</strong> Please try to reupload the file.
+                      </div>';
+                return view('auth.register');
+            }
+            else {
+                $extension = explode(".", $file["name"]);
+
+                if (end($extension) != 'csv') {
+                    echo '<div class="alert alert-success alert-dismissible fade show text-center">
+                            <button type="button" class="close" data-dismiss="alert">&times;</button>
+                            <strong>File Error!</strong> Extension of the file must be csv.
+                          </div>';
+                    return view('auth.register');
+                }
+                else {
+                    $this->massRegister($file["tmp_name"], $data["role"]);
+                    return view('auth.register');
+                }
+            }
+        }
+        else {
+            $this->registerUser($data);
+            return view('auth.register');
+        }       
+    }
 }
diff --git a/doc/changerequest.md b/doc/changerequest.md
new file mode 100644
index 0000000000000000000000000000000000000000..f1e4ab191aefdf732cd5566862ed1cea50a23f28
--- /dev/null
+++ b/doc/changerequest.md
@@ -0,0 +1,132 @@
+# Dokumentasi
+
+## Deskripsi Pekerjaan
+
+## Daftar Feature dan Change Request
+
+1. Membuat datepicker baru yang lebih mudah digunakan
+2. Membuat fitur _mass-register_
+3. Merapikan tampilan _dashboard_ dosen
+4. _Fix bug_ pada registrasi
+
+## Product Backlog
+
+1. Membuat datepicker
+2. Membuat fitur _mass-register_ dengan menggunakan file .csv
+3. Merapikan tampilan _dashboard_ dosen
+4. _Fix bug_: membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis
+5. _Fix bug_: membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama
+6. _Fix bug_: membuat _handler_ pada registrasi dengan isi _password_ dengan _confirm password_ berbeda
+
+## Sprint
+
+### Sprint 1
+
+#### Product Backlog 1
+
+1. Membuat datepicker
+2. Membuat fitur _mass-register_ dengan menggunakan file .csv
+3. Merapikan tampilan _dashboard_ dosen
+4. _Fix bug_: membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis
+5. _Fix bug_: membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama
+
+#### Sprint Backlog 1
+
+1. Front-end/mass-register: Membuat fitur _mass-register_ dengan menggunakan file .csv
+2. Back-end/mass-register: Membuat fitur _mass-register_ dengan menggunakan file .csv
+3. Membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis
+4. Membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama
+5. _Fix bug_:Membuat pada tampilan _dashboard_ dosen dengan css
+#### Dokumentasi Teknis 1
+
+Struktur PL
+
+Perilaku PL
+
+- Membuat fitur _mass-register_ dengan menggunakan file .csv
+
+  Before: registrasi dalam jumlah banyak dilakukan dengan mendaftarkan akun satu persatu
+
+  After: registrasi dalam jumlah banyak dapat dilakukan dengan mengunggah file .csv dengan format:
+
+  ```txt
+    Nama, Username, E-Mail Address, Phone Number, Password
+  ```
+
+- Membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis
+
+  Before: registrasi akun mahasiswa tanpa pembuatan kelas tesis menghasilkan error, namun akun mahasiswa tetap terdaftar tetapi tanpa memiliki _role_.
+
+  After: registrasi akun mahasiswa tanpa pembuatan kelas tesis menghasilkan notifikasi untuk melakukan pembuatan kelas tesis terlebih dahulu dan akun menjadi tidak terdaftar.
+
+- Membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama
+
+  Before: registrasi akun dengan alamat _e-mail_ yang sudah terdaftar menghasilkan error.
+
+  After: registrasi akun dengan alamat _e-mail_ yang sudah terdaftar menghasilkan notifikasi bahwa _e-mail_ sudah terdaftar.
+
+Antarmuka PL
+
+- Membuat fitur _mass-register_ dengan menggunakan file .csv
+
+  Before:
+  ![Mass Register Before](screenshots/massregister_before.JPG)
+
+  After:
+  ![Mass Register After](screenshots/massregister_after.jpg)
+
+- Membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis
+
+  Before:
+  ![Kelas Tesis Handle Before](screenshots/kelastesishandle_before.jpg)
+
+  After:
+  ![Kelas Tesis Handle After](screenshots/kelastesishandle_after.jpg)
+
+- Membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama
+
+  Before:
+  ![Email Handle Before](screenshots/emailhandle_before.jpg)
+
+  After:
+  ![Email Handle After](screenshots/emailhandle_after.jpg)
+ 
+- Membuat pada tampilan _dashboard_ dosen dengan css
+
+  Before:
+  ![Tampilan Before](screenshots/tampilan_before.jpg)
+
+  After:
+  ![Tampilan After](screenshots/tampilan_after.jpg)
+
+### Sprint 2
+
+#### Product Backlog 2
+
+1. _Fix bug_: membuat _handler_ pada registrasi dengan isi _password_ dengan _confirm password_ berbeda
+
+#### Sprint Backlog 2
+
+1. Membuat _handler_ untuk registrasi dengan isi _password_ dengan _confirm password_ berbeda
+
+#### Dokumentasi Teknis 2
+
+Struktur PL
+
+Perilaku PL
+
+- Membuat _handler_ untuk registrasi dengan isi _password_ dengan _confirm password_ berbeda
+
+  Before: registrasi akun dengan isi _password_ dengan _confirm password_ berbeda akan tetap berhasil, dan akun terdaftar dengan _password_ pada input _password_.
+
+  After: registrasi akun dengan isi _password_ dengan _confirm password_ berbeda akan gagal dan muncul notifikasi bahwa isi _confirm password_ berbeda.
+
+Antarmuka PL
+
+- Membuat _handler_ untuk registrasi dengan isi _password_ dengan _confirm password_ berbeda
+
+  Before:
+  ![Confirm Password Handle Before](screenshots/confirmpasswordhandle_before.JPG)
+
+  After:
+  ![Confirm Password Handle After](screenshots/confirmpasswordhandle_after.JPG)
\ No newline at end of file
diff --git a/doc/screenshots/confirmpasswordhandle_after.JPG b/doc/screenshots/confirmpasswordhandle_after.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..209113c4176ba742e6828ed5e87a7cb7c50b564a
Binary files /dev/null and b/doc/screenshots/confirmpasswordhandle_after.JPG differ
diff --git a/doc/screenshots/confirmpasswordhandle_before.JPG b/doc/screenshots/confirmpasswordhandle_before.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..25065e01fd4ca8e3423dd634b083795f2be483b6
Binary files /dev/null and b/doc/screenshots/confirmpasswordhandle_before.JPG differ
diff --git a/doc/screenshots/emailhandle_after.jpg b/doc/screenshots/emailhandle_after.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a76fd301a953aabef70627cf416b6242f711ba07
Binary files /dev/null and b/doc/screenshots/emailhandle_after.jpg differ
diff --git a/doc/screenshots/emailhandle_before.JPG b/doc/screenshots/emailhandle_before.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..cac4aa4b925d8dcbe72170e56a9b7da030b18661
Binary files /dev/null and b/doc/screenshots/emailhandle_before.JPG differ
diff --git a/doc/screenshots/kelastesishandle_after.jpg b/doc/screenshots/kelastesishandle_after.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7ae09d92f1468f8ed33aedd476cc975a7427f6d0
Binary files /dev/null and b/doc/screenshots/kelastesishandle_after.jpg differ
diff --git a/doc/screenshots/kelastesishandle_before.JPG b/doc/screenshots/kelastesishandle_before.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..88378c1277bc62458fa898ae5314d54e68cdc971
Binary files /dev/null and b/doc/screenshots/kelastesishandle_before.JPG differ
diff --git a/doc/screenshots/massregister_after.jpg b/doc/screenshots/massregister_after.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c7ed9cdf15bf36badbcccc69a7f2ff846c094e4b
Binary files /dev/null and b/doc/screenshots/massregister_after.jpg differ
diff --git a/doc/screenshots/massregister_before.JPG b/doc/screenshots/massregister_before.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..789c0c418f91ede9f3ae745e8c57b16b72b1930a
Binary files /dev/null and b/doc/screenshots/massregister_before.JPG differ
diff --git a/doc/screenshots/tampilan_after.png b/doc/screenshots/tampilan_after.png
new file mode 100644
index 0000000000000000000000000000000000000000..44ba034fdd6e967b1db78827a60a98fac15dd614
Binary files /dev/null and b/doc/screenshots/tampilan_after.png differ
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php
index bcc6f7ec4438e5ab13d62c96c3f86b5db5242288..6ff9c8dd47445bd2f7ac3aa3b124b58044fa8e5a 100644
--- a/resources/views/auth/register.blade.php
+++ b/resources/views/auth/register.blade.php
@@ -104,6 +104,56 @@
                 </div>
             </div>
         </div>
+
+        <!-- mass register -->
+        <div class="col-md-8">
+            <div class="card">
+                <div class="card-header">Mass Register</div>
+
+                <div class="card-body">
+                    Upload CSV file with format:
+                    name, NIM, e-mail, phone, password
+                    <form method="POST" action="/register" enctype="multipart/form-data">
+                        @csrf
+
+                        <div class="form-group row">
+                            <label for="role" class="col-md-4 col-form-label text-md-right">Role</label>
+                            
+                            <div class="col-md-6">
+                                <select type="text" id="role" name="role" class="form-control">
+                                    <option value="Mahasiswa">Mahasiswa</option>
+                                    <option value="Dosen">Dosen</option>
+                                    <option value="Manajer">Manajer</option>
+                                </select>
+                            </div>
+                        </div>
+
+                        <div class="form-group row">
+                            <label for="file" class="col-md-4 col-form-label text-md-right">File</label>
+
+                            <div class="col-md-6">
+                                <input id="file" type="file" name="file" class="form-control{{ $errors->has('file') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>
+
+                                @if ($errors->has('file'))
+                                    <span class="invalid-feedback">
+                                        <strong>{{ $errors->first('file') }}</strong>
+                                    </span>
+                                @endif
+                            </div>
+                        </div>
+
+                        <div class="form-group row mb-0">
+                            <div class="col-md-6 offset-md-4">
+                                <button type="submit" class="btn btn-primary">
+                                    Register
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </div>
+
     </div>
 </div>
 @endsection
diff --git a/routes/web.php b/routes/web.php
index 0c8ba7b91ca95216a58edac90647f55d96d75676..638df8d65fe9908d3c7ca3acb80a2c2536246f41 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -35,7 +35,8 @@ Route::post('mahasiswa/edit/{id}', 'MahasiswaController@edit');
 
 
 Route::get('register','Auth\RegisterController@showForm')->name('register');
-Route::post('register','Auth\RegisterController@registerUser')->name('registerPost');
+Route::post('register','Auth\RegisterController@registerUsers')->name('registerPost');
+
 
 Route::get('/home', 'HomeController@index')->name('home');
 Route::get('/generate/admin', 'Auth\RegisterController@generateAdmin');