diff --git a/app/Events/TableAccessed.php b/app/Events/TableAccessed.php
new file mode 100644
index 0000000000000000000000000000000000000000..63c8e35b3b93ff6e6328bcc53814ea94fcc57f01
--- /dev/null
+++ b/app/Events/TableAccessed.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Events;
+
+use App\Events\Event;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+
+class TableAccessed extends Event
+{
+    use SerializesModels;
+
+    private $model;
+
+    /**
+     * Create a new event instance.
+     *
+     * @return void
+     */
+    public function __construct($model)
+    {
+        $this->model = $model;
+    }
+
+    /**
+     * Get the channels the event should be broadcast on.
+     *
+     * @return array
+     */
+    public function broadcastOn()
+    {
+        return [];
+    }
+
+    public function getModel() { return $this->model; }
+}
diff --git a/app/Events/TableModified.php b/app/Events/TableModified.php
new file mode 100644
index 0000000000000000000000000000000000000000..186e969f2b4cafca73cb7ddbd4bd39c4b08a4cd2
--- /dev/null
+++ b/app/Events/TableModified.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Events;
+
+use App\Events\Event;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+
+class TableModified extends Event
+{
+    use SerializesModels;
+
+    private $model;
+
+    /**
+     * Create a new event instance.
+     *
+     * @return void
+     */
+    public function __construct($model)
+    {
+        $this->model = $model;
+    }
+
+    /**
+     * Get the channels the event should be broadcast on.
+     *
+     * @return array
+     */
+    public function broadcastOn()
+    {
+        return [];
+    }
+
+    public function getModel() { return $this->model; }
+}
diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php
index 72801efd1ba74c3713f40c1809ead346cadd62f4..3c8a11c7de0cd1da560e2491af7d3157300cbdd8 100644
--- a/app/Http/Controllers/RoleController.php
+++ b/app/Http/Controllers/RoleController.php
@@ -36,13 +36,19 @@ class RoleController extends Controller
     
     public function index($userId)
     {
-        return view('menu.manageRole', ['id'=>$userId,'dataRole' => User::find($userId)->roles()->get()]);
+        $model = User::find($userId)->roles()->get();
+        \Event::fire(new \App\Events\TableAccessed($model));
+        return view('menu.manageRole', ['id'=>$userId,'dataRole' => $model]);
     }
 
     public function store($userId)
     {
         $data = Input::all();
-        if (UsersRoles::create(["id_user"=>$userId, "id_role"=>Input::get('id_role')])){}
+        if (UsersRoles::create([
+            "id_user"=>$userId, 
+            "id_role"=>Input::get('id_role'),
+            'created_by' => Auth::user()->id
+        ])){}
         return redirect('/user/'.$userId.'/role');
     }
 
diff --git a/app/Http/Controllers/ScheduleController.php b/app/Http/Controllers/ScheduleController.php
index 2c284c27f05b5f4fe254e7de0ed146598c4995b5..c95d537fc6399b9d2491738308490e9e6f555f2d 100644
--- a/app/Http/Controllers/ScheduleController.php
+++ b/app/Http/Controllers/ScheduleController.php
@@ -59,6 +59,8 @@ class ScheduleController extends Controller
         {
             $all = Schedule::where('id_user', Auth::user()->id)->get();
         }
+
+        // \Event::fire(new \App\Events\TableAccessed($all));
         foreach ($all as $jadwal) {
             $tmp = [];
             $tmp = $jadwal;
@@ -83,6 +85,7 @@ class ScheduleController extends Controller
             $sched->time = Input::get('time','');
             $sched->amount = Input::get('amount',1);
             $sched->is_done = Input::get('is_done', 0);
+            $sched->created_by = Auth::user()->id;
             $sched->id = 0;
             $sched->save();
             $tps = Tps::find($sched->id_tps);
@@ -141,6 +144,7 @@ class ScheduleController extends Controller
             if(Input::has('amount'))
             $sched->amount = Input::get('amount');
             $sched->is_done = Input::get('is_done');
+            \Event::fire(new \App\Events\TableModified($sched));
             $sched->save();
             $tps = Tps::find($sched->id_tps);
             $this->notifySupir('TPS '.$tps->nama.' penuh, jadwal anda di TPS tersebut berubah');
@@ -150,6 +154,7 @@ class ScheduleController extends Controller
         {
             if($sched->is_done!=Input::get('is_done')){
                 $sched->is_done = Input::get('is_done');
+                \Event::fire(new \App\Events\TableModified($sched));
                 $sched->save();
                 $tps = Tps::find($sched->id_tps);
                 $tps->capacity_now += $sched->amount;
@@ -159,6 +164,7 @@ class ScheduleController extends Controller
                     $tps->capacity_now = $tps->capacity_full;
                     $tps->is_full = 1;
                 }
+                \Event::fire(new \App\Events\TableModified($tps));
                 $tps->save();
             }   
             return redirect('/schedule');
diff --git a/app/Http/Controllers/TpsController.php b/app/Http/Controllers/TpsController.php
index 469a242674a1e4367deb33d37c33ab8cb5113120..e2210695c33ef4382836c62c01afaf247ec3ec68 100644
--- a/app/Http/Controllers/TpsController.php
+++ b/app/Http/Controllers/TpsController.php
@@ -53,6 +53,7 @@ class TpsController extends Controller
         {
             $all = Tps::where('id_manager', Auth::user()->id)->get();
         }
+        \Event::fire(new \App\Events\TableAccessed($all));
         foreach ($all as $tps) {
             $tmp = [];
             $tmp = $tps;
@@ -70,6 +71,7 @@ class TpsController extends Controller
         $tps->nama = Input::get('name','');
         $tps->is_full = Input::get('is_full', 0);
         $tps->id_manager = Input::get('idPengelola', 0);
+        $tps->created_by = Auth::user()->id;
         $tps->id = 0;
         $tps->save();
         //$tps = Tps::create(Input::all());
@@ -109,6 +111,7 @@ class TpsController extends Controller
         $tps->is_full = Input::get('is_full', 0);
         $tps->id_manager = Input::get('idPengelola', 0);
         $tps->save();
+        \Event::fire(new \App\Events\TableModified($tps));
         return redirect('/tps');
     }
 
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index ff94410d3318a8c244d39ef2cd4859c98ed91971..fbc9c3bfd2416124d7e434948882689c718a2d3b 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -44,6 +44,7 @@ class UserController extends Controller
     
     public function index()
     {
+        \Event::fire(new \App\Events\TableAccessed(User::all()));
         return view('menu.user', ['data' => User::all()]);
     }
 
@@ -53,6 +54,7 @@ class UserController extends Controller
             'name' => Input::get('name'),
             'email' => Input::get('email'),
             'password' => bcrypt(Input::get('password')),
+            'created_by' => Auth::user()->id
         ]);
         return redirect('/user');
     }
@@ -85,6 +87,7 @@ class UserController extends Controller
             'email' => Input::get('email'),
             'password' => bcrypt(Input::get('password')),
         ]);
+        \Event::fire(new \App\Events\TableModified($user));
         return redirect('/user');
     }
 
diff --git a/app/Listeners/LastAccessUpdate.php b/app/Listeners/LastAccessUpdate.php
new file mode 100644
index 0000000000000000000000000000000000000000..878620afa4cf4347582121fee7d85bd91045fe7d
--- /dev/null
+++ b/app/Listeners/LastAccessUpdate.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\TableAccessed;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Carbon\Carbon;
+
+class LastAccessUpdate
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  TableAccessed  $event
+     * @return void
+     */
+    public function handle(TableAccessed $event)
+    {
+        foreach ($event->getModel() as $row) {
+            $row->seen_at = Carbon::now();
+            $row->seen_by = \Auth::user()->id;
+            $row->save();
+        }
+    }
+}
diff --git a/app/Listeners/LastModifyUpdate.php b/app/Listeners/LastModifyUpdate.php
new file mode 100644
index 0000000000000000000000000000000000000000..02549ce02df63bb5c4379e1a0a00bc12a87fb721
--- /dev/null
+++ b/app/Listeners/LastModifyUpdate.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\TableModified;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Carbon\Carbon;
+
+class LastModifyUpdate
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  TableModified  $event
+     * @return void
+     */
+    public function handle(TableModified $event)
+    {
+        foreach ($event->getModel() as $row) {
+            $row->updated_by = \Auth::user()->id;
+            $row->save();
+        }
+    }
+}
diff --git a/app/Listeners/LoginLogger.php b/app/Listeners/LoginLogger.php
new file mode 100644
index 0000000000000000000000000000000000000000..6121a374ba8eb72bab0ffb58c15feca4ea10f5ff
--- /dev/null
+++ b/app/Listeners/LoginLogger.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\SomeEvent;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use App\User;
+use Carbon\Carbon;
+
+class LoginLogger
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  SomeEvent  $event
+     * @return void
+     */
+    public function handle(User $user)
+    {
+        $user->last_login = Carbon::now();
+        $user->save();
+    }
+}
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 58ce9624988b6b372641d0069991415072e0b6a6..70bf557dd3bfb3954119a8c093b47b618d25c339 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -13,8 +13,14 @@ class EventServiceProvider extends ServiceProvider
      * @var array
      */
     protected $listen = [
-        'App\Events\SomeEvent' => [
-            'App\Listeners\EventListener',
+        'auth.login' => [
+            'App\Listeners\LoginLogger',
+        ],
+        'App\Events\TableAccessed' => [
+            'App\Listeners\LastAccessUpdate',
+        ],
+        'App\Events\TableModified' => [
+            'App\Listeners\LastModifyUpdate',
         ],
     ];
 
diff --git a/database/migrations/2016_05_01_163505_add_last_login_column_to_users_table.php b/database/migrations/2016_05_01_163505_add_last_login_column_to_users_table.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5931d0fcfeb195daa6333247ce299079d34860f
--- /dev/null
+++ b/database/migrations/2016_05_01_163505_add_last_login_column_to_users_table.php
@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddLastLoginColumnToUsersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->timestamp('last_login')->after('remember_token');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropColumn('last_login');
+        });
+    }
+}
diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php
index 9833600abdbe04833e10e3ff6779ed46ccbc4c1d..fe18662c330388653ed04f524e23b853ec19a958 100644
--- a/resources/views/auth/passwords/email.blade.php
+++ b/resources/views/auth/passwords/email.blade.php
@@ -20,6 +20,7 @@
                         <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                             <label class="col-md-4 control-label">E-Mail Address</label>
 
+
                             <div class="col-md-6">
                                 <input type="email" class="form-control" name="email" value="{{ old('email') }}">