diff --git a/system/boot.php b/system/boot.php
index 9d0fd4de..67fa438b 100644
--- a/system/boot.php
+++ b/system/boot.php
@@ -47,6 +47,13 @@ function _get($param, $defvalue = '')
     }
 }
 
+class Lang {
+    public static function T($var) {
+        return Lang($var);
+    }
+}
+
+
 require('system/orm.php');
 
 ORM::configure("mysql:host=$db_host;dbname=$db_name");
@@ -175,6 +182,29 @@ function _log($description, $type = '', $userid = '0')
     $d->save();
 }
 
+function Lang($key){
+    global $_L,$lan_file;
+    if(!empty($_L[$key])){
+        return $_L[$key];
+    }
+    $val = $key;
+    $key = alphanumeric($key," ");
+    if(!empty($_L[$key])){
+        return $_L[$key];
+    }else if(!empty($_L[str_replace(' ','_',$key)])){
+        return $_L[str_replace(' ','_',$key)];
+    }else{
+        $key = str_replace(' ','_',$key);
+        file_put_contents($lan_file, "$"."_L['$key'] = '".addslashes($val)."';\n", FILE_APPEND);
+        return $val;
+    }
+}
+
+function alphanumeric($str, $tambahan = "")
+{
+    return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
+}
+
 
 function sendTelegram($txt)
 {
@@ -195,6 +225,16 @@ function sendSMS($phone, $txt)
     }
 }
 
+function sendWhatsapp($phone, $txt)
+{
+    global $_c;
+    if(!empty($_c['wa_url'])){
+        $waurl = str_replace('[number]',urlencode($phone),$_c['wa_url']);
+        $waurl = str_replace('[text]',urlencode($txt),$waurl);
+        file_get_contents($waurl);
+    }
+}
+
 
 function time_elapsed_string($datetime, $full = false)
 {
diff --git a/system/controllers/community.php b/system/controllers/community.php
new file mode 100644
index 00000000..6bcd10e8
--- /dev/null
+++ b/system/controllers/community.php
@@ -0,0 +1,13 @@
+<?php
+/**
+* PHP Mikrotik Billing (https://ibnux.github.io/phpmixbill/)
+**/
+_auth();
+$ui->assign('_title', 'Community - '. $config['CompanyName']);
+$ui->assign('_system_menu', 'community');
+
+$action = $routes['1'];
+$admin = Admin::_info();
+$ui->assign('_admin', $admin);
+
+$ui->display('community.tpl');
\ No newline at end of file
diff --git a/system/controllers/order.php b/system/controllers/order.php
new file mode 100644
index 00000000..00f2b157
--- /dev/null
+++ b/system/controllers/order.php
@@ -0,0 +1,39 @@
+<?php
+/**
+* PHP Mikrotik Billing (https://ibnux.github.io/phpmixbill/)
+**/
+_auth();
+$ui->assign('_system_menu', 'order');
+$action = $routes['1'];
+$user = User::_info();
+$ui->assign('_user', $user);
+
+//Client Page
+$bill = User::_billing();
+$ui->assign('_bill', $bill);
+
+
+switch ($action) {
+    case 'voucher':
+        $ui->assign('_title', $_L['Order_Voucher'].' - '. $config['CompanyName']);
+        $ui->display('user-order.tpl');
+        break;
+    case 'ppoe':
+        $ui->assign('_title', 'Order PPOE Internet- '. $config['CompanyName']);$routers = ORM::for_table('tbl_routers')->find_many();
+        $plans = ORM::for_table('tbl_plans')->where('type', 'PPPOE')->find_many();
+        $ui->assign('routers',$routers);
+        $ui->assign('plans', $plans);
+        $ui->display('user-orderPPOE.tpl');
+        break;
+    case 'hotspot':
+        $ui->assign('_title', 'Order Hotspot Internet- '. $config['CompanyName']);
+        $routers = ORM::for_table('tbl_routers')->find_many();
+        $plans = ORM::for_table('tbl_plans')->where('type', 'Hotspot')->find_many();
+        $ui->assign('routers',$routers);
+        $ui->assign('plans', $plans);
+        $ui->display('user-orderHotspot.tpl');
+        break;
+    default:
+        $ui->display('404.tpl');
+}
+
diff --git a/system/controllers/paymentgateway.php b/system/controllers/paymentgateway.php
index 52c0fff0..5421f4d9 100644
--- a/system/controllers/paymentgateway.php
+++ b/system/controllers/paymentgateway.php
@@ -12,6 +12,7 @@ $ui->assign('_admin', $admin);
 switch ($action) {
     case 'xendit':
         $ui->assign('_title', 'Xendit - Payment Gateway - '. $config['CompanyName']);
+        $ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_xendit.json'), true));
         $ui->display('app-xendit.tpl');
         break;
     case 'xendit-post':
@@ -37,6 +38,16 @@ switch ($action) {
             $d->value = $xendit_verification_token;
             $d->save();
         }
+        $d = ORM::for_table('tbl_appconfig')->where('setting', 'xendit_channel')->find_one();
+        if($d){
+            $d->value = implode(',',$_POST['xendit_channel']);
+            $d->save();
+        }else{
+            $d = ORM::for_table('tbl_appconfig')->create();
+            $d->setting = 'xendit_channel';
+            $d->value = implode(',',$_POST['xendit_channel']);
+            $d->save();
+        }
 
         _log('[' . $admin['username'] . ']: Xendit ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']);
 
@@ -44,7 +55,7 @@ switch ($action) {
         break;
     case 'midtrans':
         $ui->assign('_title', 'Midtrans - Payment Gateway - '. $config['CompanyName']);
-
+        $ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_midtrans.json'), true));
         $ui->display('app-midtrans.tpl');
         break;
     case 'midtrans-post':
@@ -81,9 +92,73 @@ switch ($action) {
             $d->value = $midtrans_server_key;
             $d->save();
         }
+        $d = ORM::for_table('tbl_appconfig')->where('setting', 'midtrans_channel')->find_one();
+        if($d){
+            $d->value = implode(',',$_POST['midtrans_channel']);
+            $d->save();
+        }else{
+            $d = ORM::for_table('tbl_appconfig')->create();
+            $d->setting = 'midtrans_channel';
+            $d->value = implode(',',$_POST['midtrans_channel']);
+            $d->save();
+        }
 
         _log('[' . $admin['username'] . ']: Midtrans ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']);
 
         r2(U . 'paymentgateway/midtrans', 's', $_L['Settings_Saved_Successfully']);
         break;
+    case 'tripay':
+        $ui->assign('_title', 'Tripay - Payment Gateway - '. $config['CompanyName']);
+        $ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_tripay.json'), true));
+        $ui->display('app-tripay.tpl');
+        break;
+    case 'tripay-post':
+        $tripay_merchant = _post('tripay_merchant');
+        $tripay_api_key = _post('tripay_api_key');
+        $tripay_secret_key = _post('tripay_secret_key');
+        $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_merchant')->find_one();
+        if($d){
+            $d->value = $tripay_merchant;
+            $d->save();
+        }else{
+            $d = ORM::for_table('tbl_appconfig')->create();
+            $d->setting = 'tripay_merchant';
+            $d->value = $tripay_merchant;
+            $d->save();
+        }
+        $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_api_key')->find_one();
+        if($d){
+            $d->value = $tripay_api_key;
+            $d->save();
+        }else{
+            $d = ORM::for_table('tbl_appconfig')->create();
+            $d->setting = 'tripay_api_key';
+            $d->value = $tripay_api_key;
+            $d->save();
+        }
+        $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_secret_key')->find_one();
+        if($d){
+            $d->value = $tripay_secret_key;
+            $d->save();
+        }else{
+            $d = ORM::for_table('tbl_appconfig')->create();
+            $d->setting = 'tripay_secret_key';
+            $d->value = $tripay_secret_key;
+            $d->save();
+        }
+        $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_channel')->find_one();
+        if($d){
+            $d->value = implode(',',$_POST['tripay_channel']);
+            $d->save();
+        }else{
+            $d = ORM::for_table('tbl_appconfig')->create();
+            $d->setting = 'tripay_channel';
+            $d->value = implode(',',$_POST['tripay_channel']);
+            $d->save();
+        }
+
+        _log('[' . $admin['username'] . ']: Tripay ' . $_L['Settings_Saved_Successfully'].json_encode($_POST['tripay_channel']), 'Admin', $admin['id']);
+
+        r2(U . 'paymentgateway/tripay', 's', $_L['Settings_Saved_Successfully']);
+        break;
 }
diff --git a/system/controllers/prepaid.php b/system/controllers/prepaid.php
index 9306710d..eb74fb9d 100644
--- a/system/controllers/prepaid.php
+++ b/system/controllers/prepaid.php
@@ -406,7 +406,7 @@ switch ($action) {
             $in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
             $ui->assign('in', $in);
 
-            sendSMS($c['username'], "*$_c[CompanyName]*\n".
+            sendWhatsapp($c['username'], "*$_c[CompanyName]*\n".
 					"$_c[address]\n".
 					"$_c[phone]\n".
 					"\n\n".
@@ -1050,7 +1050,7 @@ switch ($action) {
             $ui->assign('in', $in);
 
 
-            sendSMS($c['username'], "*$_c[CompanyName]*\n".
+            sendWhatsapp($c['username'], "*$_c[CompanyName]*\n".
 					"$_c[address]\n".
 					"$_c[phone]\n".
 					"\n\n".
diff --git a/system/controllers/register.php b/system/controllers/register.php
index df71b937..7576e90a 100644
--- a/system/controllers/register.php
+++ b/system/controllers/register.php
@@ -18,9 +18,11 @@ use PEAR2\Net\RouterOS;
 
 require_once 'system/autoload/PEAR2/Autoload.php';
 
+$otpPath = 'system/uploads/sms/';
+
 switch ($do) {
     case 'post':
-
+        $otp_code = _post('otp_code');
         $username = _post('username');
         $fullname = _post('fullname');
         $password = _post('password');
@@ -41,6 +43,32 @@ switch ($do) {
             $msg .= $_L['PasswordsNotMatch'] . '<br>';
         }
 
+        if(!empty($_c['sms_url'])){
+            $otpPath .= sha1($username.$db_password).".txt";
+            if(file_exists($otpPath) && time()-filemtime($otpPath)>300){
+                unlink($otpPath);
+                r2(U . 'register', 's', 'Verification code expired');
+            }else if(file_exists($otpPath)){
+                $code = file_get_contents($otpPath);
+                if($code!=$otp_code){
+                    $ui->assign('username', $username);
+                    $ui->assign('fullname', $fullname);
+                    $ui->assign('address', $address);
+                    $ui->assign('phonenumber', $phonenumber);
+                    $ui->assign('notify', '<div class="alert alert-success">
+                    <button type="button" class="close" data-dismiss="alert">
+                    <span aria-hidden="true">×</span>
+                    </button>
+                    <div>Verification code is Wrong</div></div>');
+                    $ui->display('register-otp.tpl');
+                    exit();
+                }else{
+                    unlink($otpPath);
+                }
+            }else{
+                r2(U . 'register', 's', 'No Verification code');
+            }
+        }
         $d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
         if ($d) {
             $msg .= $_L['account_already_exist'] . '<br>';
@@ -65,9 +93,8 @@ switch ($do) {
                 <span aria-hidden="true">×</span>
                 </button>
                 <div>Failed to register</div></div>');
-                $ui->display('register.tpl');
+                r2(U . 'register', 's', 'Failed to register');
             }
-            //r2(U . 'register', 's', $_L['account_created_successfully']);
         } else {
             $ui->assign('username', $username);
             $ui->assign('fullname', $fullname);
@@ -83,10 +110,47 @@ switch ($do) {
         break;
 
     default:
-        $ui->assign('username', "");
-        $ui->assign('fullname', "");
-        $ui->assign('address', "");
-        $ui->assign('phonenumber', "");
-        $ui->display('register.tpl');
+        if(!empty($_c['sms_url'])){
+            $username = _post('username');
+            if(!empty($username)){
+                $d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
+                if ($d) {
+                    r2(U . 'register', 's', $_L['account_already_exist']);
+                }
+                if(!file_exists($otpPath)){
+                    mkdir($otpPath);
+                    touch($otpPath.'index.html');
+                }
+                $otpPath .= sha1($username.$db_password).".txt";
+                if(file_exists($otpPath) && time()-filemtime($otpPath)<120){
+                    $ui->assign('username', $username);
+                    $ui->assign('notify', '<div class="alert alert-success">
+                    <button type="button" class="close" data-dismiss="alert">
+                    <span aria-hidden="true">×</span>
+                    </button>
+                    <div>Please wait '.(120-(time()-filemtime($otpPath))).' seconds before sending another SMS</div></div>');
+                    $ui->display('register-otp.tpl');
+                }else{
+                    $otp = rand(100000,999999);
+                    file_put_contents($otpPath, $otp);
+                    sendSMS($username,$_c['CompanyName']."\nYour Verification code are: $otp");
+                    $ui->assign('username', $username);
+                    $ui->assign('notify', '<div class="alert alert-success">
+                    <button type="button" class="close" data-dismiss="alert">
+                    <span aria-hidden="true">×</span>
+                    </button>
+                    <div>Verification code has been sent to your phone</div></div>');
+                    $ui->display('register-otp.tpl');
+                }
+            }else{
+                $ui->display('register-rotp.tpl');
+            }
+        }else{
+            $ui->assign('username', "");
+            $ui->assign('fullname', "");
+            $ui->assign('address', "");
+            $ui->assign('otp', false);
+            $ui->display('register.tpl');
+        }
         break;
 }
diff --git a/system/controllers/routers.php b/system/controllers/routers.php
index 190c91ae..9acd9adf 100644
--- a/system/controllers/routers.php
+++ b/system/controllers/routers.php
@@ -130,9 +130,17 @@ switch ($action) {
         }
 
         if($d['name'] != $name){
-            $c = ORM::for_table('tbl_routers')->where('ip_address',$ip_address)->find_one();
+            $c = ORM::for_table('tbl_routers')->where('name',$name)->where_not_equal('id',$id)->find_one();
             if($c){
-                $msg .= $_L['Router_already_exist']. '<br>';
+                $msg .= 'Name Already Exists<br>';
+            }
+        }
+        $oldname = $d['name'];
+
+        if($d['ip_address'] != $ip_address){
+            $c = ORM::for_table('tbl_routers')->where('ip_address',$ip_address)->where_not_equal('id',$id)->find_one();
+            if($c){
+                $msg .= 'IP Already Exists<br>';
             }
         }
 
@@ -152,6 +160,24 @@ switch ($action) {
             $d->password = $password;
 			$d->description = $description;
             $d->save();
+            $p = ORM::for_table('tbl_plans')->where('routers',$oldname)->find_result_set();
+            $p->set('routers',$name);
+            $p->save();
+            $p = ORM::for_table('tbl_payment_gateway')->where('routers',$oldname)->find_result_set();
+            $p->set('routers',$name);
+            $p->save();
+            $p = ORM::for_table('tbl_pool')->where('routers',$oldname)->find_result_set();
+            $p->set('routers',$name);
+            $p->save();
+            $p = ORM::for_table('tbl_transactions')->where('routers',$oldname)->find_result_set();
+            $p->set('routers',$name);
+            $p->save();
+            $p = ORM::for_table('tbl_user_recharges')->where('routers',$oldname)->find_result_set();
+            $p->set('routers',$name);
+            $p->save();
+            $p = ORM::for_table('tbl_voucher')->where('routers',$oldname)->find_result_set();
+            $p->set('routers',$name);
+            $p->save();
             r2(U . 'routers/list', 's', $_L['Updated_Successfully']);
         }else{
             r2(U . 'routers/edit/'.$id, 'e', $msg);
diff --git a/system/controllers/settings.php b/system/controllers/settings.php
index 8aa24954..74b5b160 100644
--- a/system/controllers/settings.php
+++ b/system/controllers/settings.php
@@ -203,6 +203,7 @@ switch ($action) {
         $telegram_bot = _post('telegram_bot');
         $telegram_target_id = _post('telegram_target_id');
         $sms_url = _post('sms_url');
+        $wa_url = _post('wa_url');
         $address = _post('address');
         $payment_gateway = _post('payment_gateway');
         if ($company == '') {
@@ -254,6 +255,17 @@ switch ($action) {
                 $d->save();
             }
 
+            $d = ORM::for_table('tbl_appconfig')->where('setting', 'wa_url')->find_one();
+            if($d){
+                $d->value = $wa_url;
+                $d->save();
+            }else{
+                $d = ORM::for_table('tbl_appconfig')->create();
+                $d->setting = 'wa_url';
+                $d->value = $wa_url;
+                $d->save();
+            }
+
             $d = ORM::for_table('tbl_appconfig')->where('setting', 'payment_gateway')->find_one();
             if($d){
                 $d->value = $payment_gateway;
diff --git a/system/lan/indonesia/common.lan.php b/system/lan/indonesia/common.lan.php
index a8fef15c..6259ed43 100644
--- a/system/lan/indonesia/common.lan.php
+++ b/system/lan/indonesia/common.lan.php
@@ -244,3 +244,13 @@ $_L['Name_Lang'] = 'Nama Bahasa';
 $_L['Folder_Lang'] = 'Nama Folder';
 $_L['Translator'] = 'Translator';
 $_L['Lang_already_exist'] = 'Nama bahasa sudah ada';
+$_L['Payment_Gateway'] = 'Payment Gateway';
+$_L['Community'] = 'Community';
+$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
+$_L['1_user_can_be_used_for_many_devices'] = '1 user can be used for many devices?';
+$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
+
+$_L['Explain_Coverage_of_router'] = 'Jelaskan Cakupan wilayah hotspot';
+$_L['Name_of_Area_that_router_operated'] = 'Nama Lokasi/Wilayah Router beroperasi';
+$_L['Payment_Notification_URL_Recurring_Notification_URL_Pay_Account_Notification_URL'] = 'Payment Notification URL, Recurring Notification URL, Pay Account Notification URL';
+$_L['Finish_Redirect_URL_Unfinish_Redirect_URL_Error_Redirect_URL'] = 'Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL';
diff --git a/system/paymentgateway/channel_midtrans.json b/system/paymentgateway/channel_midtrans.json
new file mode 100644
index 00000000..7794c156
--- /dev/null
+++ b/system/paymentgateway/channel_midtrans.json
@@ -0,0 +1,82 @@
+[
+	{
+		"id": "credit_card",
+		"name": "Credit Card",
+		"min": 10000
+	},
+	{
+		"id": "bca_va",
+		"name": "BCA",
+		"min": 10000
+	},
+	{
+		"id": "permata_va",
+		"name": "Permata",
+		"min": 10000
+	},
+	{
+		"id": "bni_va",
+		"name": "BNI",
+		"min": 10000
+	},
+	{
+		"id": "bri_va",
+		"name": "BRI",
+		"min": 10000
+	},
+	{
+		"id": "echannel",
+		"name": "Mandiri Bill",
+		"min": 10000
+	},
+	{
+		"id": "gopay",
+		"name": "Gopay",
+		"min": 1000
+	},
+	{
+		"id": "bca_klikbca",
+		"name": "KLIKBCA",
+		"min": 10000
+	},
+	{
+		"id": "bca_klikpay",
+		"name": "BCA KLIKPAY",
+		"min": 10000
+	},
+	{
+		"id": "cimb_clicks",
+		"name": "CIMB Clicks",
+		"min": 10000
+	},
+	{
+		"id": "danamon_online",
+		"name": "Danamon",
+		"min": 5000
+	},
+	{
+		"id": "bri_epay",
+		"name": "BRImo",
+		"min": 10000
+	},
+	{
+		"id": "indomaret",
+		"name": "Indomaret",
+		"min": 5000
+	},
+	{
+		"id": "alfamart",
+		"name": "Alfamart",
+		"min": 5000
+	},
+	{
+		"id": "ShopeePay",
+		"name": "ShopeePay",
+		"min": 1000
+	},
+	{
+		"id": "uob_ezpay",
+		"name": "UOB EZ Pay",
+		"min": 1000
+	}
+]
diff --git a/system/paymentgateway/channel_tripay.json b/system/paymentgateway/channel_tripay.json
new file mode 100644
index 00000000..9f1d8b78
--- /dev/null
+++ b/system/paymentgateway/channel_tripay.json
@@ -0,0 +1,92 @@
+[
+	{
+		"id": "PERMATAVA",
+		"name": "Permata Bank",
+		"min": 10000
+	},
+	{
+		"id": "MYBVA",
+		"name": "Maybank",
+		"min": 10000
+	},
+	{
+		"id": "BNIVA",
+		"name": "BNI",
+		"min": 10000
+	},
+	{
+		"id": "BRIVA",
+		"name": "BRI",
+		"min": 10000
+	},
+	{
+		"id": "MANDIRIVA",
+		"name": "Mandiri",
+		"min": 10000
+	},
+	{
+		"id": "BCAVA",
+		"name": "BCA",
+		"min": 10000
+	},
+	{
+		"id": "SMSVA",
+		"name": "Sinarmas",
+		"min": 10000
+	},
+	{
+		"id": "MUAMALATVA",
+		"name": "Muamalat",
+		"min": 10000
+	},
+	{
+		"id": "SAMPOERNAVA",
+		"name": "Sahabat Sampoerna",
+		"min": 10000
+	},
+	{
+		"id": "BSIVA",
+		"name": "BSI",
+		"min": 10000
+	},
+	{
+		"id": "ALFAMART",
+		"name": "Alfamart ",
+		"min": 5000
+	},
+	{
+		"id": "INDOMARET",
+		"name": "Indomaret ",
+		"min": 10000
+	},
+	{
+		"id": "ALFAMIDI",
+		"name": "Alfamidi ",
+		"min": 5000
+	},
+	{
+		"id": "OVO",
+		"name": "OVO",
+		"min": 1000
+	},
+	{
+		"id": "QRIS",
+		"name": "QRIS by ShopeePay",
+		"min": 1000
+	},
+	{
+		"id": "QRISC",
+		"name": "QRIS (Customizable)",
+		"min": 1000
+	},
+	{
+		"id": "QRIS2",
+		"name": "QRIS",
+		"min": 1000
+	},
+	{
+		"id": "SHOPEEPAY",
+		"name": "ShopeePay ",
+		"min": 1000
+	}
+]
diff --git a/system/paymentgateway/channel_xendit.json b/system/paymentgateway/channel_xendit.json
new file mode 100644
index 00000000..00afe33b
--- /dev/null
+++ b/system/paymentgateway/channel_xendit.json
@@ -0,0 +1,82 @@
+[
+	{
+		"id": "CREDIT_CARD",
+		"name": "CREDIT CARD",
+		"min": 10000
+	},
+	{
+		"id": "PERMATA",
+		"name": "Permata Bank",
+		"min": 10000
+	},
+	{
+		"id": "BNI",
+		"name": "BNI",
+		"min": 10000
+	},
+	{
+		"id": "BRI",
+		"name": "BRI",
+		"min": 10000
+	},
+	{
+		"id": "MANDIRI",
+		"name": "Mandiri",
+		"min": 10000
+	},
+	{
+		"id": "BCA",
+		"name": "BCA",
+		"min": 10000
+	},
+	{
+		"id": "BSI",
+		"name": "BSI",
+		"min": 10000
+	},
+	{
+		"id": "DD_BRI",
+		"name": "Direct Debit BRI",
+		"min": 10000
+	},
+	{
+		"id": "DD_BCA_KLIKPAY",
+		"name": "Direct Debit BCA KLIKPAY",
+		"min": 10000
+	},
+	{
+		"id": "ALFAMART",
+		"name": "Alfamart ",
+		"min": 5000
+	},
+	{
+		"id": "INDOMARET",
+		"name": "Indomaret ",
+		"min": 10000
+	},
+	{
+		"id": "OVO",
+		"name": "OVO",
+		"min": 1000
+	},
+	{
+		"id": "DANA",
+		"name": "DANA",
+		"min": 1000
+	},
+	{
+		"id": "LINKAJA",
+		"name": "LinkAja",
+		"min": 1000
+	},
+	{
+		"id": "SHOPEEPAY",
+		"name": "ShopeePay ",
+		"min": 1000
+	},
+	{
+		"id": "QRIS",
+		"name": "QRIS",
+		"min": 1000
+	}
+]
diff --git a/ui/ui/app-midtrans.tpl b/ui/ui/app-midtrans.tpl
index 7a19ce89..c3b7000d 100644
--- a/ui/ui/app-midtrans.tpl
+++ b/ui/ui/app-midtrans.tpl
@@ -28,8 +28,8 @@
                     <div class="form-group">
                         <label class="col-md-2 control-label">Payment Notification URL</label>
                         <div class="col-md-6">
-                            <input type="text" readonly class="form-control" value="{$_url}callback/midtrans">
-                            <p class="help-block">Payment Notification URL, Recurring Notification URL, Pay Account Notification URL</p>
+                            <input type="text" readonly class="form-control" onclick="this.select()" value="{$_url}callback/midtrans">
+                            <p class="help-block">{Lang::T('Payment Notification URL, Recurring Notification URL, Pay Account Notification URL')}</p>
                             <a href="https://dashboard.midtrans.com/settings/vtweb_configuration" target="_blank" class="help-block">https://dashboard.midtrans.com/settings/vtweb_configuration</a>
                         </div>
                     </div>
@@ -37,11 +37,19 @@
                     <div class="form-group">
                         <label class="col-md-2 control-label">Finish Redirect URL</label>
                         <div class="col-md-6">
-                            <input type="text" readonly class="form-control" value="{$_url}accounts/transaction">
-                            <p class="help-block">Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL</p>
+                            <input type="text" readonly class="form-control" onclick="this.select()" value="{$_url}accounts/transaction">
+                            <p class="help-block">{Lang::T('Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL')}</p>
                             <a href="https://dashboard.midtrans.com/settings/vtweb_configuration" target="_blank" class="help-block">https://dashboard.midtrans.com/settings/vtweb_configuration</a>
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">Channels</label>
+                        <div class="col-md-6">
+                            {foreach $channels as $channel}
+                                <label class="checkbox-inline"><input type="checkbox" {if strpos($_c['midtrans_channel'], $channel['id']) !== false}checked="true"{/if} id="midtrans_channel" name="midtrans_channel[]" value="{$channel['id']}"> {$channel['name']}</label>
+                            {/foreach}
+                        </div>
+                    </div>
                     <div class="form-group">
                         <div class="col-lg-offset-2 col-lg-10">
                             <button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button>
diff --git a/ui/ui/app-settings.tpl b/ui/ui/app-settings.tpl
index 500e35de..fec09055 100644
--- a/ui/ui/app-settings.tpl
+++ b/ui/ui/app-settings.tpl
@@ -52,12 +52,22 @@
                         </div>
                     </div>
                 </div>
+                <div class="panel-heading">SMS OTP Registration</div>
+                <div class="panel-body">
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">SMS Server URL</label>
+                        <div class="col-md-6">
+                            <input type="text" class="form-control" id="sms_url" name="sms_url" value="{$_c['sms_url']}" placeholder="https://domain/?param_number=[number]&param_text=[text]&secret=">
+                            <p class="help-block">Must include <b>[text]</b> &amp; <b>[number]</b>, it will be replaced.</p>
+                        </div>
+                    </div>
+                </div>
                 <div class="panel-heading">Whatsapp Notification</div>
                 <div class="panel-body">
                     <div class="form-group">
-                        <label class="col-md-2 control-label">Server URL</label>
+                        <label class="col-md-2 control-label">Whatsapp Server URL</label>
                         <div class="col-md-6">
-                            <input type="text" class="form-control" id="sms_url" name="sms_url" value="{$_c['sms_url']}" placeholder="https://domain/?param_number=[number]&param_text=[text]&secret=">
+                            <input type="text" class="form-control" id="wa_url" name="wa_url" value="{$_c['wa_url']}" placeholder="https://domain/?param_number=[number]&param_text=[text]&secret=">
                             <p class="help-block">Must include <b>[text]</b> &amp; <b>[number]</b>, it will be replaced.</p>
                         </div>
                     </div>
diff --git a/ui/ui/app-tripay.tpl b/ui/ui/app-tripay.tpl
new file mode 100644
index 00000000..c2d2f101
--- /dev/null
+++ b/ui/ui/app-tripay.tpl
@@ -0,0 +1,53 @@
+{include file="sections/header.tpl"}
+
+<form class="form-horizontal" method="post" role="form" action="{$_url}paymentgateway/tripay-post" >
+    <div class="row">
+        <div class="col-sm-12 col-md-12">
+            <div class="panel panel-default panel-hovered panel-stacked mb30">
+                <div class="panel-heading">Tripay</div>
+                <div class="panel-body">
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">Kode Merchant</label>
+                        <div class="col-md-6">
+                            <input type="text" class="form-control" id="tripay_merchant" name="tripay_merchant" placeholder="T" value="{$_c['tripay_merchant']}">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">API Key</label>
+                        <div class="col-md-6">
+                            <input type="text" class="form-control" id="tripay_api_key" name="tripay_api_key" value="{$_c['tripay_api_key']}">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">Secret Key</label>
+                        <div class="col-md-6">
+                            <input type="text" class="form-control" id="tripay_secret_key" name="tripay_secret_key" value="{$_c['tripay_secret_key']}">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">Callback URL</label>
+                        <div class="col-md-6">
+                            <input type="text" readonly class="form-control" onclick="this.select()" value="{$_url}callback/tripay">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">Channels</label>
+                        <div class="col-md-6">
+                            {foreach $channels as $channel}
+                                <label class="checkbox-inline"><input type="checkbox" {if strpos($_c['tripay_channel'], $channel['id']) !== false}checked="true"{/if} id="tripay_channel" name="tripay_channel[]" value="{$channel['id']}"> {$channel['name']}</label>
+                            {/foreach}
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-lg-offset-2 col-lg-10">
+                            <button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button>
+                            <a class="btn btn-info waves-effect waves-light" href="https://tripay.co.id/?ref=TP19304" target="_blank">Daftar Tripay</a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</form>
+{include file="sections/footer.tpl"}
diff --git a/ui/ui/app-xendit.tpl b/ui/ui/app-xendit.tpl
index f1e4d693..a3f043af 100644
--- a/ui/ui/app-xendit.tpl
+++ b/ui/ui/app-xendit.tpl
@@ -28,6 +28,14 @@
                             <a href="https://dashboard.xendit.co/settings/developers#callbacks" target="_blank" class="help-block">https://dashboard.xendit.co/settings/developers#callbacks</a>
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label">Channels</label>
+                        <div class="col-md-6">
+                            {foreach $channels as $channel}
+                                <label class="checkbox-inline"><input type="checkbox" {if strpos($_c['xendit_channel'], $channel['id']) !== false}checked="true"{/if} id="xendit_channel" name="xendit_channel[]" value="{$channel['id']}"> {$channel['name']}</label>
+                            {/foreach}
+                        </div>
+                    </div>
                     <div class="form-group">
                         <div class="col-lg-offset-2 col-lg-10">
                             <button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button>
diff --git a/ui/ui/community.tpl b/ui/ui/community.tpl
new file mode 100644
index 00000000..bb20bb6a
--- /dev/null
+++ b/ui/ui/community.tpl
@@ -0,0 +1,112 @@
+{include file="sections/header.tpl"}
+
+					<div class="row">
+						<div class="col-sm-6">
+							<div class="panel panel-hovered mb20 panel-default">
+								<div class="panel-heading">Discussions</div>
+                                <div class="panel-body">Get help from community</div>
+								<div class="panel-footer">
+                                    <a href="https://github.com/ibnux/phpmixbill/discussions" target="_blank" class="btn btn-primary btn-lg btn-block"><i class="ion ion-chatboxes"></i> Chat Now</a>
+								</div>
+							</div>
+						</div>
+                        <div class="col-sm-6">
+							<div class="panel panel-hovered mb20 panel-default">
+								<div class="panel-heading">Feedback</div>
+								<div class="panel-body">
+                                    Feedback and Bug Report
+								</div>
+								<div class="panel-footer">
+                                    <a href="https://github.com/ibnux/phpmixbill/issues" target="_blank" class="btn btn-primary btn-lg btn-block"><i class="ion ion-chatboxes"></i> Give Feedback</a>
+								</div>
+							</div>
+						</div>
+					</div>
+
+                    <div class="row">
+						<div class="col-sm-6">
+							<div class="panel panel-hovered mb20 panel-default">
+								<div class="panel-heading">Donasi</div>
+                                <div class="panel-body">Untuk pengembangan lebih baik, donasi ke iBNuX, donasi akan membantu terus pengembangan aplikasi</div>
+								<div class="table-responsive">
+									<table class="table table-bordered table-striped">
+										<tbody>
+											<tr>
+												<td>BCA</td>
+												<td>5410-454-825</td>
+											</tr>
+											<tr>
+												<td>Mandiri</td>
+												<td>163-000-1855-793</td>
+											</tr>
+											<tr>
+												<td>Atas nama</td>
+												<td>Ibnu Maksum</td>
+											</tr>
+										</tbody>
+									</table>
+                                </div>
+                                <div class="panel-footer">
+                                    <a href="https://trakteer.id/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Trakteer</a>
+                                    <a href="https://karyakarsa.com/ibnux/support" target="_blank" class="btn btn-primary btn-lg btn-block">karyakarsa</a>
+								</div>
+							</div>
+						</div>
+                        <div class="col-sm-6">
+							<div class="panel panel-hovered mb20 panel-default">
+								<div class="panel-heading">Donations</div>
+								<div class="panel-body">
+                                    Donations will help to continue phpmixbill development
+								</div>
+                                <div class="table-responsive">
+									<table class="table table-bordered table-striped">
+										<tbody>
+											<tr>
+												<td>Bank Central Asia</td>
+												<td>5410-454-825</td>
+											</tr>
+											<tr>
+												<td>SWIFT/BIC</td>
+												<td>CENAIDJA</td>
+											</tr>
+											<tr>
+												<td>Jakarta</td>
+												<td>Indonesia</td>
+											</tr>
+											<tr>
+												<td>Account Name</td>
+												<td>Ibnu Maksum</td>
+											</tr>
+										</tbody>
+									</table>
+                                </div>
+								<div class="panel-footer">
+                                    <a href="https://paypal.me/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Paypal</a>
+								</div>
+							</div>
+						</div>
+					</div>
+                    <div class="row">
+						<div class="col-sm-6">
+							<div class="panel panel-hovered mb20 panel-default">
+								<div class="panel-heading">Chat with me</div>
+                                <div class="panel-body">Paid Support?<br>donation confirmation?<br>Or ask any Donation Alternative</div>
+								<div class="panel-footer">
+                                    <a href="https://t.me/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Telegram</a>
+                                    <a href="https://twitter.com/messages/compose?recipient_id=20653807&text=Hello+i+am+phpmixbill+user" target="_blank" class="btn btn-primary btn-lg btn-block">Twitter</a>
+                                    <a href="https://m.me/ibnumaksum" target="_blank" class="btn btn-primary btn-lg btn-block">Facebook Messenger</a>
+                                    <a href="https://keybase.io/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Keybase</a>
+								</div>
+							</div>
+						</div>
+                        <div class="col-sm-6">
+							<div class="panel panel-default panel-hovered mb20 activities">
+								<div class="panel-heading">PHPMIXBILL</div>
+								<div class="panel-body">
+									{$_L['Welcome_Text_Admin']}
+								</div>
+							</div>
+						</div>
+					</div>
+
+{include file="sections/footer.tpl"}
diff --git a/ui/ui/dashboard.tpl b/ui/ui/dashboard.tpl
index b0481791..2ed62919 100644
--- a/ui/ui/dashboard.tpl
+++ b/ui/ui/dashboard.tpl
@@ -84,7 +84,7 @@
 						<div class="col-md-7">
 							<div class="panel panel-default mb20 panel-hovered project-stats table-responsive">
 								<div class="panel-heading">Vouchers Stock</div>
-								<div class="panel-body">	
+								<div class="panel-body">
 									<table class="table">
 										<thead>
 											<tr>
@@ -137,7 +137,7 @@
 								</div>
 							</div>
 						</div>
-						
+
 						<div class="col-md-5">
 							<div class="panel panel-default panel-hovered mb20 activities">
 								<div class="panel-heading">{$_L['Activity_Log']}</div>
@@ -153,14 +153,8 @@
 									</ul>
 								</div>
 							</div>
-							<div class="panel panel-default panel-hovered mb20 activities">
-								<div class="panel-heading">PHPMIXBILL</div>
-								<div class="panel-body">
-									{$_L['Welcome_Text_Admin']}
-								</div>
-							</div>
 						</div>
-						
+
 					</div>
 {else}
 					<div class="row">
@@ -204,7 +198,7 @@
 					               			<p class="small mb15">{date($_c['date_format'], strtotime($_bill['expiration']))} {$_bill['time']}</p>
 					                	</div>
 									</div>
-									
+
 								</div>
 							</div>
 						</div>
diff --git a/ui/ui/hotspot-add.tpl b/ui/ui/hotspot-add.tpl
index abaf8b5c..d3338abc 100644
--- a/ui/ui/hotspot-add.tpl
+++ b/ui/ui/hotspot-add.tpl
@@ -11,6 +11,7 @@
 						<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
 						<div class="col-md-6">
 							<input type="text" class="form-control" id="name" name="name">
+                                <p class="help-block">{Lang::T('Cannot be change after saved')}</p>
 						</div>
                     </div>
                     <div class="form-group">
@@ -79,6 +80,7 @@
 						<label class="col-md-2 control-label">{$_L['Shared_Users']}</label>
 						<div class="col-md-6">
 							<input type="text" class="form-control" id="sharedusers" name="sharedusers" value="1">
+                            <p class="help-block">{Lang::T('1 user can be used for many devices?')}</p>
 						</div>
                     </div>
                     <div class="form-group">
@@ -103,6 +105,7 @@
 									<option value="{$rs['name']}">{$rs['name']}</option>
                                 {/foreach}
                             </select>
+                                <p class="help-block">{Lang::T('Cannot be change after saved')}</p>
 						</div>
                     </div>
 
diff --git a/ui/ui/sections/header.tpl b/ui/ui/sections/header.tpl
index d320375c..2ef93717 100644
--- a/ui/ui/sections/header.tpl
+++ b/ui/ui/sections/header.tpl
@@ -23,7 +23,6 @@
 	<link rel="stylesheet" href="{$_theme}/styles/bootstrap.min.css">
 	<link rel="stylesheet" href="{$_theme}/styles/main.min.css">
 
-	<link href='http://fonts.googleapis.com/css?family=Roboto:400,500,700,300' rel='stylesheet' type='text/css'>
 
 	<!-- Match Media polyfill for IE9 -->
 	<!--[if IE 9]> <script src="{$_theme}/scripts/ie/matchMedia.js"></script>  <![endif]-->
@@ -53,7 +52,7 @@
 			<li>
 				<div class="site-logo visible-xs">
 					<a href="{$_url}dashboard" class="text-uppercase h3">
-						<span class="text">{$_L['Logo']}</span>
+						<span class="text">{Lang::T('Logo')}</span>
 					</a>
 				</div>
 			</li>
@@ -265,19 +264,20 @@
 					<li {if $_system_menu eq 'paymentgateway'}class="open"{/if}>
 						<a href="#" onClick="toggleDropdownMobile(this)">
 							<i class="ion ion-cash"></i>
-							<span class="text">Payment Gateway</span>
+							<span class="text">{Lang::T('Payment Gateway')}</span>
 							<i class="arrow ion-chevron-left"></i>
 						</a>
 						<ul class="inner-drop list-unstyled">
 							<li {if $_system_menu eq 'paymentgateway'}class="active"{/if}><a href="{$_url}paymentgateway/xendit">Xendit</a></li>
 							<li {if $_system_menu eq 'paymentgateway'}class="active"{/if}><a href="{$_url}paymentgateway/midtrans">Midtrans</a></li>
+							<li {if $_system_menu eq 'paymentgateway'}class="active"{/if}><a href="{$_url}paymentgateway/tripay">Tripay</a></li>
 							<li>&nbsp;</li>
 						</ul>
 					</li>
-					<li {if $_system_menu eq 'disquss'}class="active"{/if}>
-						<a href="https://github.com/ibnux/phpmixbill/discussions" target="_blank">
-							<i class="ion ion-chatbubbles"></i>
-							<span class="text">Discussions</span>
+					<li {if $_system_menu eq 'community'}class="active"{/if}>
+						<a href="{$_url}community">
+							<i class="ion ion-chatboxes"></i>
+							<span class="text">{Lang::T('Community')}</span>
 						</a>
 					</li>
 				{/if}