diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..485dee64bcfb48793379b200a1afd14e85a8aaf4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea
diff --git a/data/db_dagojek.sql b/data/db_dagojek.sql
new file mode 100644
index 0000000000000000000000000000000000000000..31560391562d46785b6dabc175826b7b74ea7073
--- /dev/null
+++ b/data/db_dagojek.sql
@@ -0,0 +1,144 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.4.1deb2ubuntu2
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Generation Time: Oct 04, 2017 at 09:40 PM
+-- Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2
+-- PHP Version: 7.0.22-0ubuntu0.16.04.1
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Database: `db_dagojek`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `driver`
+--
+
+CREATE TABLE `driver` (
+  `id` int(11) NOT NULL,
+  `rating` float NOT NULL DEFAULT '0',
+  `sum_order` int(11) NOT NULL DEFAULT '0'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `driver`
+--
+
+INSERT INTO `driver` (`id`, `rating`, `sum_order`) VALUES
+  (1, 4.3, 121);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `order`
+--
+
+CREATE TABLE `order` (
+  `id_order` int(11) NOT NULL,
+  `id_driver` int(11) NOT NULL,
+  `id_customer` int(11) NOT NULL,
+  `source` varchar(20) NOT NULL,
+  `destination` varchar(20) NOT NULL,
+  `rating` int(11) NOT NULL,
+  `comment` varchar(120) NOT NULL,
+  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `prefered_location`
+--
+
+CREATE TABLE `prefered_location` (
+  `id_driver` int(11) NOT NULL,
+  `location` varchar(20) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `user`
+--
+
+CREATE TABLE `user` (
+  `id` int(15) NOT NULL,
+  `name` varchar(50) NOT NULL,
+  `username` varchar(20) NOT NULL,
+  `email` varchar(40) NOT NULL,
+  `password` varchar(100) NOT NULL,
+  `phone` varchar(15) NOT NULL,
+  `photo` varchar(100) NOT NULL,
+  `is_driver` tinyint(1) NOT NULL DEFAULT '0'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `user`
+--
+
+INSERT INTO `user` (`id`, `name`, `username`, `email`, `password`, `phone`, `photo`, `is_driver`) VALUES
+  (1, 'Fadhil Imam Kurnia', 'fadhilimamk', '13515146@std.stei.itb.ac.id', 'dtashfVATSaashdbgasdjy78123bahsVJSF72vsahsj', '085797490039', 'http://www.simian-risk.com/wp-content/themes/custom/images/empty-profile.png', 1);
+
+--
+-- Indexes for dumped tables
+--
+
+--
+-- Indexes for table `driver`
+--
+ALTER TABLE `driver`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- Indexes for table `order`
+--
+ALTER TABLE `order`
+  ADD PRIMARY KEY (`id_order`);
+
+--
+-- Indexes for table `prefered_location`
+--
+ALTER TABLE `prefered_location`
+  ADD PRIMARY KEY (`id_driver`,`location`);
+
+--
+-- Indexes for table `user`
+--
+ALTER TABLE `user`
+  ADD PRIMARY KEY (`id`),
+  ADD UNIQUE KEY `username` (`username`,`email`);
+
+--
+-- AUTO_INCREMENT for dumped tables
+--
+
+--
+-- AUTO_INCREMENT for table `user`
+--
+ALTER TABLE `user`
+  MODIFY `id` int(15) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `driver`
+--
+ALTER TABLE `driver`
+  ADD CONSTRAINT `driver_user_id` FOREIGN KEY (`id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
\ No newline at end of file
diff --git a/src/controller/ProfilController.php b/src/controller/ProfilController.php
index e08bbecb47aa667a56112394fff826e43958b7b9..d5a5b9c9d8a24ee4bd3d48051eefe242118bfd1d 100644
--- a/src/controller/ProfilController.php
+++ b/src/controller/ProfilController.php
@@ -1,5 +1,8 @@
 <?php
 
+require_once __DIR__.'/../model/User.php';
+require_once __DIR__.'/../model/Driver.php';
+
 class ProfilController {
     
     public static function ProfilHandler() {
@@ -12,35 +15,17 @@ class ProfilController {
 
         // Decrypt user id
         $uid = simpleCrypt($_GET['u'], 'd');
-        
-        try {
-
-            // Get connection to database
-            $dbconn = DB::getInstance();
-
-            // Prepare and execute sql query
-            $stmt = $dbconn->prepare("SELECT * FROM user WHERE id=$uid");
-            $stmt->execute();
 
-            $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
-            $user = $stmt->fetchObject();
-            if (!$user) {
-                echo "User not found!";
-                return;
-            }
-            
-            $user->is_driver = 1;
+        // Getting driver profile
+        $dbconn = DB::getInstance();
+        $user = Driver::Create($uid, $dbconn);
 
-            if ($user->is_driver) {
-                $driver_rating = 4.7;
-                $driver_order = 1728;
-            }
-
-            require __DIR__.'/../view/profil.php';
-
-        } catch (PDOException $e) {
-            echo "Error: ".$e->getMessage();
+        if (!$user) {
+            echo "User not found!";
+            return;
         }
+
+        require __DIR__.'/../view/profil.php';
         
     }
 
diff --git a/src/model/Driver.php b/src/model/Driver.php
new file mode 100644
index 0000000000000000000000000000000000000000..af1cf7b4e507aa92e42562db2e1f5f1ef4842cca
--- /dev/null
+++ b/src/model/Driver.php
@@ -0,0 +1,27 @@
+<?php
+
+class Driver extends User {
+    public $rating;
+    public $sumOrder;
+
+    public static function Create($id, PDO $dbconn) {
+        try {
+            $stmt = $dbconn->prepare("
+                SELECT id, name, username, email, phone, rating, is_driver AS isDriver, sum_order AS sumOrder 
+                FROM user NATURAL JOIN driver
+                WHERE id =:id"
+            );
+            $stmt->execute(array('id'=>$id));
+
+            $stmt->setFetchMode(PDO::FETCH_ASSOC);
+            $result = $stmt->fetchObject('Driver');
+
+            return $result;
+
+        } catch (PDOException $e) {
+            echo "Error : ".$e->getMessage();
+            return false;
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/model/User.php b/src/model/User.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ff09677b201b709fd8d0614f81bf31b9d501ade
--- /dev/null
+++ b/src/model/User.php
@@ -0,0 +1,72 @@
+<?php
+
+class User {
+
+    public $id;
+    public $name;
+    public $username;
+    public $email;
+    public $phone;
+    public $isDriver;
+
+    public static function Create($id, PDO $conn) {
+        try {
+            $stmt = $conn->prepare("SELECT * FROM user WHERE id=$id");
+            $stmt->execute();
+
+            $stmt->setFetchMode(PDO::FETCH_ASSOC);
+            $user = $stmt->fetchObject();
+            $result = new User($user->id, $user->name, $user->username, $user->email, $user->phone);
+            $result->isDriver = $user->is_driver;
+
+            return $result;
+        } catch (PDOException $e) {
+            echo "Error : ".$e->getMessage();
+            return false;
+        }
+    }
+
+    public static function GetAllUsers(PDO $conn) {
+        try {
+            $result = $conn->query("SELECT * FROM user")->fetchAll();
+            return $result;
+
+        } catch (PDOException $e) {
+            echo "Error: ".$e->getMessage();
+            return false;
+        }
+    }
+
+    public static function GetUserById($id, PDO $conn) {
+        try {
+            $stmt = $conn->prepare("SELECT * FROM user WHERE id=?");
+            $stmt->execute([$id]);
+
+            $stmt->setFetchMode(PDO::FETCH_OBJ);
+            $user = $stmt->fetch();
+
+            return $user;
+        } catch (PDOException $e) {
+            echo "Error: ".$e->getMessage();
+            return false;
+        }
+    }
+
+    public static function UpdateUser($user, PDO $conn) {
+        try {
+            if ($user instanceof User) {
+                $newAttributes = "";
+                $newAttributes .= "name = "."$user->name, ";
+                $newAttributes .= "email = "."$user->email, ";
+                $newAttributes .= "phone = "."$user->phone, ";
+                $newAttributes .= "is_driver = "."$user->isDriver";
+
+                $conn->prepare("UPDATE user SET $newAttributes WHERE id =?")->execute([$user->id]);
+            }
+        } catch (PDOException $e) {
+            echo "Error: ".$e->getMessage();
+            return false;
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/view/profil.php b/src/view/profil.php
index 8771902a4155fa4e84854a4158dcf3937fa9277c..fa2297d74c8c95b77399a8f65102e4242aab8b19 100644
--- a/src/view/profil.php
+++ b/src/view/profil.php
@@ -27,7 +27,7 @@
             <img class="img-circle" src="<?=$user->photo?>"/><br>
             <h2>@<?=$user->username?></h2>
             <p><?=$user->name?></p>
-            <?php if ($user->is_driver) : ?>
+            <?php if ($user->isDriver) : ?>
                 <p>Driver | <?=$driver_rating?> (<?=$driver_order?> vote<?=($driver_order>1)?'s':''?>)</p>
             <?php else : ?>
                 <p>Non Driver</p>