diff --git a/library/NGNPro/Records/GatewayRules.php b/library/NGNPro/Records/GatewayRules.php
index ff29a10..a2850be 100644
--- a/library/NGNPro/Records/GatewayRules.php
+++ b/library/NGNPro/Records/GatewayRules.php
@@ -1,572 +1,589 @@
 <?php
 
 class GatewayRules extends Records
 {
     var $carriers = array();
     var $FieldsReadOnly = array(
         'reseller',
         'changeDate'
     );
 
     var $Fields = array(
         'id'         => array('type'=>'integer','readonly' => true),
         'gateway_id' => array('type'=>'integer','name' => 'Gateway'),
         'prefix'     => array('type'=>'string'),
         'strip'      => array('type'=>'integer'),
         'prepend'    => array('type'=>'string'),
         'minLength'  => array('type'=>'integer'),
         'maxLength'  => array('type'=>'integer')
     );
 
     public function __construct($SoapEngine)
     {
         $this->filters   = array(
             'id'         => trim($_REQUEST['id_filter']),
             'gateway_id' => trim($_REQUEST['gateway_id_filter']),
             'carrier_id' => trim($_REQUEST['carrier_id_filter']),
             'prefix'     => trim($_REQUEST['prefix_filter']),
         );
 
         $this->sortElements = array(
             'changeDate' => 'Change date',
             'gateway'    => 'Gateway',
             'carrier'    => 'Carrier',
             'prefix'     => 'Prefix'
         );
         parent::__construct($SoapEngine);
     }
 
     function listRecords()
     {
         $this->getCarriers();
 
         $this->showSeachForm();
 
         // Insert credetials
         $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
 
         // Filter
         $filter = array(
             'id'         => intval($this->filters['id']),
             'gateway_id' => intval($this->filters['gateway_id']),
             'carrier_id' => intval($this->filters['carrier_id']),
             'prefix'     => $this->filters['prefix'],
             'customer'   => intval($this->filters['customer']),
             'reseller'   => intval($this->filters['reseller'])
         );
 
         // Range
         $range = array(
             'start' => intval($this->next),
             'count' => intval($this->maxrowsperpage)
         );
 
         // Order
         if (!$this->sorting['sortBy'])    $this->sorting['sortBy']    = 'changeDate';
         if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
 
         $orderBy = array(
             'attribute' => $this->sorting['sortBy'],
             'direction' => $this->sorting['sortOrder']
         );
 
         // Compose query
         $Query = array(
             'filter'  => $filter,
             'orderBy' => $orderBy,
             'range'   => $range
         );
 
         $this->log_action('getGatewayRules');
         $result  = $this->SoapEngine->soapclient->getGatewayRules($Query);
 
         if ($this->checkLogSoapError($result, true)) {
             return false;
         } else {
             $this->rows = $result->total;
 
             print "
             <div class = \"alert alert-success\"><center>$this->rows records found</center></div>
             <p>
             <table class='table table-striped table-condensed' width=100%>
             ";
 
             print "
                 <thead>
             <tr>
                 <th></th>
                 <th>Owner</th>
                 <th>Rule</th>
                 <th>Carrier</th>
                 <th>Gateway</th>
                 <th>Prefix</th>
                 <th>Strip</th>
                 <th>Prepend</th>
                 <th>MinLength</th>
                 <th>MaxLength</th>
                 <th>Change date</th>
                 <th>Actions</th>
             </tr>
             </thead>
             ";
 
             if (!$this->next)  $this->next=0;
 
             if ($this->rows > $this->maxrowsperpage) {
                 $maxrows = $this->maxrowsperpage + $this->next;
                 if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
             } else {
                 $maxrows = $this->rows;
             }
 
             $i=0;
 
             if ($this->rows) {
                 while ($i < $maxrows) {
                     if (!$result->gateway_rules[$i]) break;
 
                     $gateway_rule = $result->gateway_rules[$i];
 
                     $index = $this->next+$i+1;
 
                     $base_url_data = array(
                         'service' => $this->SoapEngine->service,
                         'id_filter' => $gateway_rule->id,
                         'reseller_filter' => $gateway_rule->reseller
                     );
 
                     $delete_url_data = array_merge(
                         $base_url_data,
                         array(
                             'action' => 'Delete',
                         )
                     );
 
                     $customer_url_data = array(
                         'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine),
                         'customer_filter' => $gateway_rule->reseller
                     );
 
                     $carrier_url_data = array_merge(
                         $base_url_data,
                         array(
                             'service' => sprintf('pstn_carriers@%s', $this->SoapEngine->soapEngine),
                             'id_filter' => $gateway_rule->carrier_id,
                         )
                     );
 
                     $gateway_url_data = array_merge(
                         $base_url_data,
                         array(
                             'service' => sprintf('pstn_gateways@%s', $this->SoapEngine->soapEngine),
                             'id_filter' => $gateway_rule->gateway_id,
                         )
                     );
 
                     if ($_REQUEST['action'] == 'Delete' &&
                         $_REQUEST['id_filter'] == $gateway_rule->id) {
                         $delete_url_data['confirm'] = 1;
                         $actionText = "<font color=red>Confirm</font>";
                     } else {
                         $actionText = "Delete";
                     }
 
                     $_delete_url = $this->buildUrl($delete_url_data);
                     $_url = $this->buildUrl($base_url_data);
                     $_customer_url = $this->buildUrl($customer_url_data);
                     $_carrier_url = $this->buildUrl($carrier_url_data);
                     $_gateway_url = $this->buildUrl($gateway_url_data);
 
                     printf(
                         "
                         <tr>
                         <td valign=top>%s</td>
                         <td valign=top><a href=%s>%s</a></td>
                         <td valign=top><a href=%s>%s</a></td>
                         <td valign=top><a href=%s>%s</a> (%d)</td>
                         <td valign=top><a href=%s>%s (%d)</a></td>
                         <td valign=top>%s</td>
                         <td valign=top>%s</td>
                         <td valign=top>%s</td>
                         <td valign=top>%s</td>
                         <td valign=top>%s</td>
                         <td valign=top>%s</td>
                         <td valign=top><a class='btn-small btn-danger' href=%s>%s</a></td>
                         </tr>
                         ",
                         $index,
                         $_customer_url,
                         $gateway_rule->reseller,
                         $_url,
                         $gateway_rule->id,
                         $_carrier_url,
                         $gateway_rule->carrier,
                         $gateway_rule->carrier_id,
                         $_gateway_url,
                         $gateway_rule->gateway,
                         $gateway_rule->gateway_id,
                         $gateway_rule->prefix,
                         $gateway_rule->strip,
                         $gateway_rule->prepend,
                         $gateway_rule->minLength,
                         $gateway_rule->maxLength,
                         $gateway_rule->changeDate,
                         $_delete_url,
                         $actionText
                     );
 
                     print "</tr>";
 
                     $i++;
                 }
             }
 
             print "</table>";
 
             if ($this->rows == 1) {
                 $this->showRecord($gateway_rule);
             } else {
                 $this->showPagination($maxrows);
             }
 
             return true;
         }
     }
 
     function showAddForm()
     {
         //if ($this->selectionActive) return;
 
         $this->getGateways();
 
         if (!count($this->gateways)) {
             print "<p>Create a gateway first</p>";
             return false;
         }
 
         printf("<form class=form-inline method=post name=addform action=%s>", $_SERVER['PHP_SELF']);
         print <<< END
 <div class='well well-small'>
     <input class='btn btn-warning' type=submit name=action value=Add>
     <input type=hidden name=sortBy value=changeDate>
     <div class='input-prepend'>
         <span class='add-on'>Gateway</span>
         <select class=span3 name=gateway_id>
 END;
         foreach (array_keys($this->gateways) as $_gateway) {
             printf("<option value='%s'>%s", $_gateway, $this->gateways[$_gateway]);
         }
         print <<< END
         </select>
     </div>
     <div class='input-prepend'><span class='add-on'>Prefix</span><input class=span1 type=text size=15 name=prefix></div>
     <div class='input-prepend'><span class='add-on'>Strip</span><input class=span1 type=text size=5 name=strip></div>
     <div class='input-prepend'>
         <span class='add-on'>Prepend</span><input class=span1 type=text size=15 name=prepend>
     </div>
     <div class='input-prepend'>
         <span class='add-on'>Min length</span><input class=span1 type=text size=5 name=minLength>
     </div>
     <div class='input-prepend'>
         <span class='add-on'>Max length</span><input class=span1 type=text size=5 name=maxLength>
     </div>
 END;
         $this->printHiddenFormElements();
 
         print <<< END
     </div>
 </form>
 END;
     }
 
     function addRecord($dictionary = array())
     {
         if ($dictionary['gateway_id']) {
             $gateway_id   = $dictionary['gateway_id'];
         } else {
             $gateway_id = trim($_REQUEST['gateway_id']);
         }
 
         if ($dictionary['prefix']) {
             $prefix   = $dictionary['prefix'];
         } else {
             $prefix   = trim($_REQUEST['prefix']);
         }
 
         if ($dictionary['strip']) {
             $strip   = $dictionary['strip'];
         } else {
             $strip   = trim($_REQUEST['strip']);
         }
 
         if ($dictionary['prepend']) {
             $prepend   = $dictionary['prepend'];
         } else {
             $prepend   = trim($_REQUEST['prepend']);
         }
 
         if ($dictionary['minLength']) {
             $minLength   = $dictionary['minLength'];
         } else {
             $minLength   = trim($_REQUEST['minLength']);
         }
 
         if ($dictionary['maxLength']) {
             $maxLength   = $dictionary['maxLength'];
         } else {
             $maxLength   = trim($_REQUEST['maxLength']);
         }
 
         if (!strlen($gateway_id)) {
             printf("<p><font color=red>Error: Missing gateway id</font>");
             return false;
         }
 
         $rule = array(
             'gateway_id' => intval($gateway_id),
             'prefix'     => $prefix,
             'prepend'    => $prepend,
             'strip'      => intval($strip),
             'minLength'  => intval($minLength),
             'maxLength'  => intval($maxLength)
         );
 
         $function = array(
             'commit'   => array(
                 'name'       => 'addGatewayRule',
                 'parameters' => array($rule),
                 'logs'       => array('success' => sprintf('Gateway rule has been added'))
             )
         );
 
         unset($this->filters);
         return $this->SoapEngine->execute($function, $this->html);
     }
 
     function deleteRecord($dictionary = array())
     {
         if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
             print "<p><font color=red>Please press on Confirm to confirm the delete.</font></p>";
             return true;
         }
 
         if ($dictionary['id']) {
             $id   = $dictionary['id'];
         } else {
             $id   = trim($this->filters['id']);
         }
 
         if (!strlen($id)) {
             print "<p><font color=red>Error: missing rule id </font>";
             return false;
         }
 
         $function = array(
             'commit'   => array(
                 'name'       => 'deleteGatewayRule',
                 'parameters' => array(intval($id)),
                 'logs'       => array('success' => sprintf('Gateway rule %d has been deleted', $id))
             )
         );
         unset($this->filters);
         return $this->SoapEngine->execute($function, $this->html);
     }
 
     function showSeachFormCustom()
     {
         printf(
             "
             <div class='input-prepend'>
             <span class='add-on'>Rule</span><input class=span2 type=text size=15 name=id_filter value='%s'>
             </div>
             ",
             $this->filters['id']
         );
-        print <<< END
-    <select class=span2 name=carrier_id_filter>
-        <option value=''>Carrier
-END;
-        $selected_carrier[$this->filters['carrier_id']]='selected';
 
-        foreach (array_keys($this->carriers) as $_carrier) {
-            printf("<option value='%s' %s>%s", $_carrier, $selected_carrier[$_carrier], $this->carriers[$_carrier]);
+        if (count($this->carriers) > 250) {
+            printf(
+                "
+                <div class='input-prepend'>
+                <span class='add-on'>Carrier</span><input class=span2 type=text size=15 name=carrier_id_filter value='%s'>
+                </div>
+                ",
+                $this->filters['carrier_id']
+            );
+        } else {
+            print <<< END
+            <select class=span2 name=carrier_id_filter>
+                <option value=''>Carrier
+END;
+            $selected_carrier[$this->filters['carrier_id']] = 'selected';
+            foreach (array_keys($this->carriers) as $_carrier) {
+                printf(
+                    "<option value='%s' %s>%s (%s)</option>",
+                    $_carrier,
+                    $selected_carrier[$_carrier],
+                    $this->carriers[$_carrier],
+                    $_carrier
+                );
+            }
+            print "</select>";
         }
 
-        print "</select>";
         printf(
             "
             <div class='input-prepend'>
             <span class='add-on'>Gateway</span><input class=span2 type=text size=15 name=gateway_id_filter value='%s'>
             </div>
             ",
             $this->filters['gateway_id']
         );
         printf(
             "
             <div class='input-prepend'>
             <span class='add-on'>Prefix</span><input class=span1 type=text size=15 name=prefix_filter value='%s'>
             </div>
             ",
             $this->filters['prefix']
         );
     }
 
     function showCustomerForm($name = 'customer_filter')
     {
     }
 
     function showTextBeforeCustomerSelection()
     {
         print "Owner";
     }
 
     function showRecord($rule)
     {
         $this->getGateways();
 
         print "<h3>Rule</h3>";
 
         printf("<form class=form-horizontal method=post name=addform action=%s>", $_SERVER['PHP_SELF']);
         print "<input type=hidden name=action value=Update>";
 
         foreach (array_keys($this->Fields) as $item) {
             if ($this->Fields[$item]['name']) {
                 $item_name = $this->Fields[$item]['name'];
             } else {
                 $item_name=ucfirst($item);
             }
 
             printf(
                 "
                 <div class='control-group'>
                 <label class=control-label>%s</label>
                 ",
                 $item_name
             );
 
             if ($this->Fields[$item]['readonly']) {
                 printf(
                     "
                     <div class=controls style='padding-top:5px'>
                     <input name=%s_form type=hidden value='%s'>
                     %s
                     </div>
                     ",
                     $item,
                     $rule->$item,
                     $rule->$item
                 );
             } else {
                 if ($item == 'gateway_id') {
                     printf("<div class=controls><select class=span2 name=%s_form>", $item);
                     $selected_gateway[$rule->$item]='selected';
 
                     foreach (array_keys($this->gateways) as $_gateway) {
                         printf(
                             "<option value='%s' %s>%s",
                             $_gateway,
                             $selected_gateway[$_gateway],
                             $this->gateways[$_gateway]
                         );
                     }
 
                     print "</select></div>";
                 } else {
                     printf(
                         "<div class=controls><input class=span2 name=%s_form size=30 type=text value='%s'></div>",
                         $item,
                         $rule->$item
                     );
                 }
             }
             print "
             </div>";
         }
 
         printf("<input type=hidden name=reseller_filter value='%s'>", $rule->reseller);
 
         $this->printFiltersToForm();
         $this->printHiddenFormElements();
 
         print <<< END
     <div class="form-actions">
         <input class='btn btn-warning' type=submit value=Update>
     </div>
 </form>
 END;
     }
 
     function updateRecord()
     {
         //print "<p>Updating rule ...";
 
         if (!$_REQUEST['id_form'] || !strlen($_REQUEST['reseller_filter'])) {
             return;
         }
 
         if (!$rule = $this->getRecord($_REQUEST['id_form'])) {
             return false;
         }
 
         foreach (array_keys($this->Fields) as $item) {
             $var_name = $item.'_form';
             if ($this->Fields[$item]['type'] == 'integer') {
                 $rule->$item = intval($_REQUEST[$var_name]);
             } else {
                 $rule->$item = trim($_REQUEST[$var_name]);
             }
         }
 
         $function = array('commit'   => array('name'       => 'updateGatewayRule',
                                             'parameters' => array($rule),
                                             'logs'       => array('success' => sprintf('Rule %d has been updated', $_REQUEST['id_form'])))
                         );
 
         $result = $this->SoapEngine->execute($function, $this->html);
         dprint_r($result);
 
         return (bool)$result;
     }
 
     function getRecord($id)
     {
         // Insert credetials
         $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
 
         // Filter
         $filter = array('id'  => intval($id));
 
         // Range
         $range = array('start' => 0,
                      'count' => 1
                      );
 
         // Order
         $this->sorting['sortBy']    = 'gateway';
         $this->sorting['sortOrder'] = 'ASC';
 
         $orderBy = array('attribute' => $this->sorting['sortBy'],
                          'direction' => $this->sorting['sortOrder']
                          );
 
         // Compose query
         $Query = array('filter'  => $filter,
                         'orderBy' => $orderBy,
                         'range'   => $range
                         );
 
         // Call function
         $this->log_action('getGatewayRules');
         $result = $this->SoapEngine->soapclient->getGatewayRules($Query);
 
         if ($this->checkLogSoapError($result, true)) {
             return false;
         } else {
             if ($result->gateway_rules[0]) {
                 return $result->gateway_rules[0];
             } else {
                 return false;
             }
         }
     }
 }
diff --git a/library/NGNPro/Records/Gateways.php b/library/NGNPro/Records/Gateways.php
index 7641477..4092c8e 100644
--- a/library/NGNPro/Records/Gateways.php
+++ b/library/NGNPro/Records/Gateways.php
@@ -1,564 +1,580 @@
 <?php
 
 class Gateways extends Records
 {
     var $carriers = array();
     var $FieldsReadOnly = array(
         'reseller',
         'changeDate'
     );
 
     var $Fields = array(
         'id'         => array('type'=>'integer',
             'readonly' => true),
         'name'       => array('type'=>'string'),
         'carrier_id' => array('type'=>'integer'),
         'transport'  => array('type'=>'string'),
         'ip'         => array('name'=>'IP or hostname',
             'type'=>'string'),
         'port'       => array('type'=>'integer')
     );
 
     //var $transports = array('udp','tcp','tls');
     var $transports = array('udp');
 
     public function __construct($SoapEngine)
     {
         $this->filters   = array(
             'id'         => trim($_REQUEST['id_filter']),
             'name'       => trim($_REQUEST['name_filter']),
             'carrier_id' => trim($_REQUEST['carrier_id_filter'])
         );
 
         $this->sortElements = array(
             'changeDate'  => 'Change date',
             'name'        => 'Gateway',
             'carrier_id'  => 'Carrier',
             'ip'          => 'Address'
         );
 
         parent::__construct($SoapEngine);
     }
 
     function listRecords()
     {
         $this->getCarriers();
 
         $this->showSeachForm();
 
         // Insert credetials
         $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
 
         // Filter
         $filter = array(
             'id'        => intval($this->filters['id']),
             'name'      => $this->filters['name'],
             'carrier_id'=> intval($this->filters['carrier_id']),
             'customer'  => intval($this->filters['customer']),
             'reseller'  => intval($this->filters['reseller'])
         );
 
         // Range
         $range = array(
             'start' => intval($this->next),
             'count' => intval($this->maxrowsperpage)
         );
 
         // Order
         if (!$this->sorting['sortBy'])    $this->sorting['sortBy']    = 'changeDate';
         if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
 
         $orderBy = array(
             'attribute' => $this->sorting['sortBy'],
             'direction' => $this->sorting['sortOrder']
         );
 
         // Compose query
         $Query = array(
             'filter'  => $filter,
             'orderBy' => $orderBy,
             'range'   => $range
         );
 
         // Call function
         $this->log_action('getGateways');
         $result = $this->SoapEngine->soapclient->getGateways($Query);
 
         if ($this->checkLogSoapError($result, true)) {
             return false;
         } else {
             $this->rows = $result->total;
 
             print <<< END
 <div class="alert alert-success"><center>$this->rows records found</center></div>
 <p>
 <table class='table table-striped table-condensed' width=100%>
     <thead>
     <tr>
         <th>Id</th>
         <th>Owner</th>
         <th>Gateway</th>
         <th>Carrier</th>
         <th>Name</th>
         <th>Address</th>
         <th>Rules</th>
         <th>Change date</th>
         <th>Actions</th>
     </tr>
     </thead>
 END;
 
             if (!$this->next)  $this->next=0;
 
             if ($this->rows > $this->maxrowsperpage) {
                 $maxrows = $this->maxrowsperpage + $this->next;
                 if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
             } else {
                 $maxrows=$this->rows;
             }
 
             $i=0;
 
             if ($this->rows) {
                 while ($i < $maxrows) {
                     if (!$result->gateways[$i]) break;
 
                     $gateway = $result->gateways[$i];
 
                     $index = $this->next + $i + 1;
 
                     $base_url_data = array(
                         'service' => $this->SoapEngine->service,
                         'id_filter' => $gateway->id,
                     );
 
                     $delete_url_data = array_merge(
                         $base_url_data,
                         array(
                             'action' => 'Delete',
                         )
                     );
 
                     $customer_url_data = array(
                         'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine),
                         'customer_filter' => $gateway->reseller
                     );
 
                     $carrier_url_data = array_merge(
                         $base_url_data,
                         array(
                             'service' => sprintf('pstn_carriers@%s', $this->SoapEngine->soapEngine),
                             'id_filter' => $gateway->carrier_id,
                             'reseller_filter' => $gateway->reseller,
                         )
                     );
 
                     $rules_url_data = array(
                         'service' => sprintf('gateway_rules@%s', $this->SoapEngine->soapEngine),
                         'gateway_id_filter' => $gateway->id,
                         'reseller_filter' => $gateway->reseller
                     );
 
                     if ($_REQUEST['action'] == 'Delete' &&
                         $_REQUEST['id_filter'] == $gateway->id) {
                         $delete_url_data['confirm'] = 1;
                         $actionText = "<font color=red>Confirm</font>";
                     } else {
                         $actionText = "Delete";
                     }
 
                     $_delete_url = $this->buildUrl($delete_url_data);
                     $_url = $this->buildUrl($base_url_data);
                     $_customer_url = $this->buildUrl($customer_url_data);
                     $_carrier_url = $this->buildUrl($carrier_url_data);
                     $_rules_url = $this->buildUrl($rules_url_data);
 
                     printf(
                         "
                         <tr>
                         <td valign=top>%s</td>
                         <td valign=top><a href=%s>%s</a></td>
                         <td valign=top><a href=%s>%s</a></td>
                         <td valign=top><a href=%s>%s</a></td>
                         <td valign=top>%s</td>
                         <td valign=top>%s:%s:%s</td>
                         <td valign=top><a href=%s>Rules</a></td>
                         <td valign=top>%s</td>
                         <td valign=top><a class='btn-small btn-danger' href=%s>%s</a></td>
                         </tr>
                         ",
                         $index,
                         $_customer_url,
                         $gateway->reseller,
                         $_url,
                         $gateway->id,
                         $_carrier_url,
                         $gateway->carrier,
                         $gateway->name,
                         $gateway->transport,
                         $gateway->ip,
                         $gateway->port,
                         $_rules_url,
                         $gateway->changeDate,
                         $_delete_url,
                         $actionText
                     );
 
                     printf("
                     </tr>
                     ");
 
                     $i++;
                 }
             }
 
             print "</table>";
 
             if ($this->rows == 1) {
                 $this->showRecord($gateway);
             } else {
                 $this->showPagination($maxrows);
             }
 
             return true;
         }
     }
 
     function showAddForm()
     {
         //if ($this->selectionActive) return;
 
         $this->getCarriers();
 
         if (!count($this->carriers)) {
             print "<p>Create a carrier first";
             return false;
         }
 
         printf("<form class='form-inline' method=post name=addform action=%s>", $_SERVER['PHP_SELF']);
         print <<< END
 <div class='well well-small'>
     <input class='btn btn-warning' type=submit name=action value=Add>
     Carrier
     <select name=carrier_id>
 END;
         foreach (array_keys($this->carriers) as $_carrier) {
             printf("<option value='%s'>%s", $_carrier, $this->carriers[$_carrier]);
         }
 
         print <<< END
     </select>
     <div class=input-prepend><span class="add-on">Name</span><input class=span2 type=text size=20 name=name></div>
     <div class=input-prepend><span class="add-on">Transport</span>
         <select class=span1 name=transport>
 END;
         foreach ($this->transports as $_transport) {
             printf("<option value='%s'>%s", $_transport, $_transport);
         }
 
         print <<< END
         </select>
     </div>
     <div class=input-prepend>
         <span class="add-on">Address</span><input class=span2 type=text size=25 name=address>
     </div>
 END;
         $this->printHiddenFormElements();
 
         print "</div>
             </form>
         ";
     }
 
     function addRecord($dictionary = array())
     {
         if ($dictionary['name']) {
             $name   = $dictionary['name'];
         } else {
             $name   = trim($_REQUEST['name']);
         }
 
         if ($dictionary['carrier_id']) {
             $carrier_id   = $dictionary['carrier_id'];
         } else {
             $carrier_id   = trim($_REQUEST['carrier_id']);
         }
 
         if ($dictionary['address']) {
             $address   = $dictionary['address'];
         } else {
             $address   = trim($_REQUEST['address']);
         }
 
         if ($dictionary['transport']) {
             $transport   = $dictionary['transport'];
         } else {
             $transport   = trim($_REQUEST['transport']);
         }
 
         if (!strlen($name) || !strlen($carrier_id) || !strlen($address)) {
             printf("<p><font color=red>Error: Missing gateway name, carrier_id or address</font>");
             return false;
         }
 
         $address_els = explode(':', $address);
 
         if (count($address_els) == 1) {
             $ip   = $address_els[0];
             $port ='5060';
         } elseif (count($address_els) == 2) {
             $ip   = $address_els[0];
             $port = $address_els[1];
         }
 
         if (!$port) $port = 5060;
 
         if (!in_array($transport, $this->transports)) {
             $transport=$this->transports[0];
         }
 
         $gateway = array(
             'name'       => $name,
             'carrier_id' => intval($carrier_id),
             'ip'         => $ip,
             'port'       => intval($port),
             'transport'  => $transport
         );
 
         $function = array(
             'commit'   => array(
                 'name'       => 'addGateway',
                 'parameters' => array($gateway),
                 'logs'       => array('success' => sprintf('Gateway %s has been added', $name))
             )
         );
 
         unset($this->filters);
         return $this->SoapEngine->execute($function, $this->html);
     }
 
     function deleteRecord($dictionary = array())
     {
         if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
             print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
             return true;
         }
 
         if ($dictionary['id']) {
             $id   = $dictionary['id'];
         } else {
             $id   = trim($this->filters['id']);
         }
 
         if (!strlen($id)) {
             print "<p><font color=red>Error: missing gateway id.</font>";
             return false;
         }
 
         $function = array(
             'commit'   => array(
                 'name'       => 'deleteGateway',
                 'parameters' => array(intval($id)),
                 'logs'       => array('success' => sprintf('Gateway %d has been deleted', $id))
             )
         );
         unset($this->filters);
         return $this->SoapEngine->execute($function, $this->html);
     }
 
     function showSeachFormCustom()
     {
         printf(
             "
             <div class=input-prepend>
             <span class=\"add-on\">Gateway</span>
             <input class=2 type=text size=10 name=id_filter value='%s'>
             </div>
             ",
             $this->filters['id']
         );
 
-        print "
-        <select name=carrier_id_filter>
-        <option value=''>Carrier";
-
-        $selected_carrier[$this->filters['carrier_id']]='selected';
-
-        foreach (array_keys($this->carriers) as $_carrier) {
-            printf("<option value='%s' %s>%s", $_carrier, $selected_carrier[$_carrier], $this->carriers[$_carrier]);
+        if (count($this->carriers) > 250) {
+            printf(
+                "
+                <div class='input-prepend'>
+                <span class='add-on'>Carrier</span><input class=span2 type=text size=15 name=carrier_id_filter value='%s'>
+                </div>
+                ",
+                $this->filters['carrier_id']
+            );
+        } else {
+            print <<< END
+            <select class=span2 name=carrier_id_filter>
+                <option value=''>Carrier
+END;
+            $selected_carrier[$this->filters['carrier_id']] = 'selected';
+            foreach (array_keys($this->carriers) as $_carrier) {
+                printf(
+                    "<option value='%s' %s>%s (%s)</option>",
+                    $_carrier,
+                    $selected_carrier[$_carrier],
+                    $this->carriers[$_carrier],
+                    $_carrier
+                );
+            }
+            print "</select>";
         }
 
-        print "</select>";
         printf(
             "
             <div class=input-prepend>
             <span class=\"add-on\">Name</span><input type=text size=20 name=name_filter value='%s'>
             </div>
             ",
             $this->filters['name']
         );
     }
 
     function showCustomerForm($name = 'customer_filter')
     {
     }
 
     function showTextBeforeCustomerSelection()
     {
         print "Owner";
     }
 
     function showRecord($gateway)
     {
         print "<h3>Gateway</h3>";
 
         printf("<form class=form-horizontal method=post name=addform action=%s>", $_SERVER['PHP_SELF']);
         print "<input type=hidden name=action value=Update>";
 
         foreach (array_keys($this->Fields) as $item) {
             if ($this->Fields[$item]['name']) {
                 $item_name=$this->Fields[$item]['name'];
             } else {
                 $item_name = ucfirst($item);
             }
 
             printf(
                 "<div class=control-group><label class=control-label>%s</label>",
                 $item_name
             );
 
             if ($this->Fields[$item]['readonly']) {
                 printf(
                     "<div class=controls style='padding-top:5px'><input name=%s_form type=hidden value='%s'>%s</div>",
                     $item,
                     $gateway->$item,
                     $gateway->$item
                 );
             } else {
                 if ($item == 'carrier_id') {
                     printf("<div class=controls><select class=span2 name=%s_form>", $item);
                     $selected_carrier[$gateway->$item]='selected';
                     foreach (array_keys($this->carriers) as $_carrier) {
                         printf(
                             "<option value='%s' %s>%s",
                             $_carrier,
                             $selected_carrier[$_carrier],
                             $this->carriers[$_carrier]
                         );
                     }
                     print "</select></div>";
                 } elseif ($item == 'transport') {
                     printf("<div class=controls><select class=span2 name=%s_form>", $item);
                     $selected_transport[$gateway->$item]='selected';
                     foreach ($this->transports as $_transport) {
                         printf("<option value='%s' %s>%s", $_transport, $selected_transport[$_transport], $_transport);
                     }
 
                     print "</select></div>";
                 } else {
                     printf(
                         "<div class=controls><input class=span2 name=%s_form size=30 type=text value='%s'></div>",
                         $item,
                         $gateway->$item
                     );
                 }
             }
             print "</div>";
         }
 
         printf("<input type=hidden name=id_filter value='%s'>", $gateway->id);
 
         $this->printFiltersToForm();
         $this->printHiddenFormElements();
 
         print "
         <div class=form-actions>
         <input class='btn btn-warning' type=submit value=Update>
         </div>
         ";
         print "</form>";
     }
 
     function updateRecord()
     {
         //print "<p>Updating gateway ...";
 
         if (!$_REQUEST['id_filter']) return;
 
         if (!$gateway = $this->getRecord($_REQUEST['id_filter'])) {
             return false;
         }
 
         foreach (array_keys($this->Fields) as $item) {
             $var_name=$item.'_form';
             if ($this->Fields[$item]['type'] == 'integer') {
                 $gateway->$item = intval($_REQUEST[$var_name]);
             } else {
                 $gateway->$item = trim($_REQUEST[$var_name]);
             }
         }
 
         if (!in_array($gateway->transport, $this->transports)) {
             printf("<font color=red>Invalid transport '%s'</font>", $gateway->transport);
             return false;
         }
 
         $function = array(
             'commit'   => array(
                 'name'       => 'updateGateway',
                 'parameters' => array($gateway),
                 'logs'       => array(
                     'success' => sprintf('Gateway %s has been updated', $_REQUEST['name_filter'])))
         );
 
         $result = $this->SoapEngine->execute($function, $this->html);
 
         dprint_r($result);
         return (bool)$result;
     }
 
     function getRecord($id)
     {
         // Insert credetials
         $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
 
         // Filter
         $filter = array('id'  => intval($id));
 
         // Range
         $range = array(
             'start' => 0,
             'count' => 1
         );
 
         // Order
         if (!$this->sorting['sortBy'])    $this->sorting['sortBy']    = 'name';
         if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
 
         $orderBy = array(
             'attribute' => $this->sorting['sortBy'],
             'direction' => $this->sorting['sortOrder']
         );
 
         // Compose query
         $Query = array(
             'filter'  => $filter,
             'orderBy' => $orderBy,
             'range'   => $range
         );
 
         // Call function
         $this->log_action('getGateways');
         $result     = $this->SoapEngine->soapclient->getGateways($Query);
 
         if ($this->checkLogSoapError($result, true)) {
             return false;
         } else {
             if ($result->gateways[0]) {
                 return $result->gateways[0];
             } else {
                 return false;
             }
         }
     }
 }
diff --git a/library/NGNPro/Records/Routes.php b/library/NGNPro/Records/Routes.php
index d5522c5d..8691089 100644
--- a/library/NGNPro/Records/Routes.php
+++ b/library/NGNPro/Records/Routes.php
@@ -1,528 +1,544 @@
 <?php
 
 class Routes extends Records
 {
     var $carriers = array();
 
     var $Fields = array(
         'id'          => array(
             'type'=>'integer',
             'readonly' => true
         ),
         'carrier_id'  => array('type'=>'integer','name'=>'Carrier'),
         'prefix'      => array('type'=>'string'),
         'originator'  => array('type'=>'string'),
         'priority'    => array('type'=>'integer')
     );
 
     var $sortElements = array(
         'prefix'       => 'Prefix',
         'priority'     => 'Priority'
     );
 
     public function __construct($SoapEngine)
     {
         $this->filters   = array(
             'prefix'    => trim($_REQUEST['prefix_filter']),
             'priority'  => trim($_REQUEST['priority_filter']),
             'carrier_id'=> trim($_REQUEST['carrier_id_filter']),
             'reseller'  => trim($_REQUEST['reseller_filter']),
             'id'        => trim($_REQUEST['id_filter'])
         );
         parent::__construct($SoapEngine);
     }
 
     function listRecords()
     {
         $this->getCarriers();
 
         $this->showSeachForm();
 
         // Insert credetials
         $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
 
         // Filter
         $filter = array(
             'prefix'       => $this->filters['prefix'],
             'carrier_id'   => intval($this->filters['carrier_id']),
             'reseller'     => intval($this->filters['reseller']),
             'id'           => intval($this->filters['id'])
         );
 
 
         // Range
         $range = array(
             'start' => intval($this->next),
             'count' => intval($this->maxrowsperpage)
         );
 
         // Order
         if (!$this->sorting['sortBy'])    $this->sorting['sortBy']    = 'prefix';
         if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
 
         $orderBy = array(
             'attribute' => $this->sorting['sortBy'],
             'direction' => $this->sorting['sortOrder']
         );
 
         // Compose query
         $Query = array(
             'filter'  => $filter,
             'orderBy' => $orderBy,
             'range'   => $range
         );
 
         // Call function
         $this->log_action('getRoutes');
         $result = $this->SoapEngine->soapclient->getRoutes($Query);
 
         if ($this->checkLogSoapError($result, true)) {
             return false;
         } else {
             $this->rows = $result->total;
 
             print <<< END
 <div class="alert alert-success"><center>$this->rows records found</center></div>
     <p>
     <table class='table table-condensed table-striped'width=100%>
         <thead>
         <tr>
             <th><b>Id</b></th>
             <th><b>Owner</b></th>
             <th><b>Route</b></th>
             <th><b>Carrier</b></th>
             <th><b>Gateways</b></th>
             <th><b>Prefix</b></th>
             <th><b>Originator</b></th>
             <th><b>Priority</b></th>
             <th><b>Change date</b></th>
             <th><b>Actions</b></th>
         </tr>
         </thead>
 END;
 
             if (!$this->next)  $this->next=0;
 
             if ($this->rows > $this->maxrowsperpage) {
                 $maxrows = $this->maxrowsperpage + $this->next;
                 if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
             } else {
                 $maxrows = $this->rows;
             }
 
             $i=0;
 
             if ($this->rows) {
                 while ($i < $maxrows) {
                     if (!$result->routes[$i]) break;
 
                     $route = $result->routes[$i];
 
                     $index = $this->next+$i+1;
 
                     $base_url_data = array(
                         'service' => $this->SoapEngine->service,
                         'id_filter' => $route->id,
                     );
 
                     $delete_url_data = array_merge(
                         $base_url_data,
                         array(
                             'action' => 'Delete',
                         )
                     );
 
                     $customer_url_data = array(
                         'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine),
                         'customer_filter' => $route->reseller
                     );
 
                     $carrier_url_data = array_merge(
                         $base_url_data,
                         array(
                             'service' => sprintf('pstn_carriers@%s', $this->SoapEngine->soapEngine),
                             'id_filter' => $route->carrier_id,
                         )
                     );
 
                     $gateway_url_data = array(
                         'service' => sprintf('pstn_gateways@%s', $this->SoapEngine->soapEngine),
                         'carrier_id_filter' => $route->carrier_id,
                         'reseller_filter' => $route->reseller
                     );
 
                     if ($_REQUEST['action'] == 'Delete' &&
                         $_REQUEST['id_filter'] == $route->id) {
                         $delete_url_data['confirm'] = 1;
                         $actionText = "<font color=red>Confirm</font>";
                     } else {
                         $actionText = "Delete";
                     }
 
                     $_delete_url = $this->buildUrl($delete_url_data);
                     $_url = $this->buildUrl($base_url_data);
                     $_customer_url = $this->buildUrl($customer_url_data);
                     $_carrier_url = $this->buildUrl($carrier_url_data);
                     $_gateway_url = $this->buildUrl($gateway_url_data);
 
                     printf(
                         "
                         <tr>
                         <td>%s</td>
                         <td><a href=%s>%s</a></td>
                         <td><a href=%s>%s</a></td>
                         <td><a href=%s>%s</a></td>
                         <td><a href=%s>Gateways</a></td>
                         <td>%s</td>
                         <td>%s</td>
                         <td>%s</td>
                         <td>%s</td>
                         <td><a class='btn-small btn-danger' href=%s>%s</a></td>
                         </tr>
                         ",
                         $index,
                         $_customer_url,
                         $route->reseller,
                         $_url,
                         $route->id,
                         $_carrier_url,
                         $route->carrier,
                         $_gateway_url,
                         $route->prefix,
                         $route->originator,
                         $route->priority,
                         $route->changeDate,
                         $_delete_url,
                         $actionText
                     );
 
                     print "</tr>";
                     $i++;
                 }
             }
 
             print "</table>";
 
             if ($this->rows == 1) {
                 $this->showRecord($route);
             } else {
                 $this->showPagination($maxrows);
             }
 
             return true;
         }
     }
 
     function showAddForm()
     {
         //if ($this->selectionActive) return;
 
         if (!count($this->carriers)) {
             print "<p>Create a carrier first";
             return false;
         }
 
         printf(
             "<form class=form-inline method=post name=addform action=%s><div class='well well-small'>",
             $_SERVER['PHP_SELF']
         );
 
         print <<< END
 <input class='btn btn-warning' type=submit name=action value=Add>
 <div class='input-prepend'>
     <span class='add-on'>Carrier</span>
     <select class=span2 name=carrier_id>
 END;
         foreach (array_keys($this->carriers) as $_carrier) {
             printf("<option value='%s'>%s", $_carrier, $this->carriers[$_carrier]);
         }
         print <<< END
     </select>
 </div>
 
 <div class='input-prepend'><span class='add-on'>Prefix</span><input type=text size=20 name=prefix></div>
 <div class='input-prepend'><span class='add-on'>Originator</span><input type=text size=20 name=originator></div>
 <div class='input-prepend'><span class='add-on'>Priority</span><input type=text size=5 name=priority></div>
 END;
         $this->printHiddenFormElements();
 
         print "</div>
         </form>
         ";
     }
 
     function addRecord($dictionary = array())
     {
         if ($dictionary['prefix']) {
             $prefix   = $dictionary['prefix'];
         } else {
             $prefix   = trim($_REQUEST['prefix']);
         }
 
         if ($dictionary['carrier_id']) {
             $carrier_id   = $dictionary['carrier_id'];
         } else {
             $carrier_id   = trim($_REQUEST['carrier_id']);
         }
 
         if ($dictionary['originator']) {
             $originator   = $dictionary['originator'];
         } else {
             $originator   = trim($_REQUEST['originator']);
         }
 
         if ($dictionary['priority']) {
             $priority   = $dictionary['priority'];
         } else {
             $priority   = trim($_REQUEST['priority']);
         }
 
         if (!strlen($carrier_id)) {
             printf("<p><font color=red>Error: Missing carrier id. </font>");
             return false;
         }
 
         $route = array(
             'prefix'       => $prefix,
             'originator'   => $originator,
             'carrier_id'   => intval($carrier_id),
             'priority'     => intval($priority)
         );
 
         $routes = array($route);
 
         $function = array(
             'commit'   => array(
                 'name'       => 'addRoutes',
                 'parameters' => array($routes),
                 'logs'       => array('success' => sprintf('Route %s has been added', $prefix))
             )
         );
 
         unset($this->filters);
         return $this->SoapEngine->execute($function, $this->html);
     }
 
     function deleteRecord($dictionary = array())
     {
         if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
             print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
             return true;
         }
 
         if ($dictionary['id']) {
             $id = $dictionary['id'];
         } else {
             $id  = trim($this->filters['id']);
         }
 
         if (!strlen($id)) {
             print "<p><font color=red>Error: missing route id. </font>";
             return false;
         }
 
         $route = array('id'=> intval($id));
 
         $routes = array($route);
 
         $function = array(
             'commit'   => array(
                 'name'       => 'deleteRoutes',
                 'parameters' => array($routes),
                 'logs'       => array('success' => sprintf('Route %s has been deleted', $id))
             )
         );
 
         unset($this->filters);
         return $this->SoapEngine->execute($function, $this->html);
     }
 
     function showSeachFormCustom()
     {
-
         printf(
             "
             <div class='input-prepend'>
             <span class='add-on'>Route</span><input type=text size=10 name=id_filter value='%s'>
             </div>
             ",
             $this->filters['id']
         );
-        print <<< END
-    <select name=carrier_id_filter>
-        <option value=''>Carrier
-END;
-        $selected_carrier[$this->filters['carrier_id']]='selected';
 
-        foreach (array_keys($this->carriers) as $_carrier) {
-            printf("<option value='%s' %s>%s", $_carrier, $selected_carrier[$_carrier], $this->carriers[$_carrier]);
+        if (count($this->carriers) > 250) {
+            printf(
+                "
+                <div class='input-prepend'>
+                <span class='add-on'>Carrier</span><input class=span2 type=text size=15 name=carrier_id_filter value='%s'>
+                </div>
+                ",
+                $this->filters['carrier_id']
+            );
+        } else {
+            print <<< END
+            <select class=span2 name=carrier_id_filter>
+                <option value=''>Carrier
+END;
+            $selected_carrier[$this->filters['carrier_id']] = 'selected';
+            foreach (array_keys($this->carriers) as $_carrier) {
+                printf(
+                    "<option value='%s' %s>%s (%s)</option>",
+                    $_carrier,
+                    $selected_carrier[$_carrier],
+                    $this->carriers[$_carrier],
+                    $_carrier
+                );
+            }
+            print "</select>";
         }
 
-        print "</select>";
         printf(
             "
             <div class='input-prepend'>
             <span class='add-on'>Prefix</span><input type=text size=15 name=prefix_filter value='%s'>
             </div>
             ",
             $this->filters['prefix']
         );
     }
 
     function showCustomerTextBox()
     {
         print "Owner";
         $this->showResellerForm('reseller');
     }
 
     function showCustomerForm($name = 'customer_filter')
     {
     }
 
     function showTextBeforeCustomerSelection()
     {
         print "Owner";
     }
 
     function getRecord($id)
     {
         // Insert credetials
         $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
 
         // Filter
         $filter = array('id'  => intval($id));
 
         // Range
         $range = array(
             'start' => 0,
             'count' => 1
         );
 
         // Order
         if (!$this->sorting['sortBy'])    $this->sorting['sortBy']    = 'prefix';
         if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
 
         $orderBy = array(
             'attribute' => $this->sorting['sortBy'],
             'direction' => $this->sorting['sortOrder']
         );
 
         // Compose query
         $Query = array(
             'filter'  => $filter,
             'orderBy' => $orderBy,
             'range'   => $range
         );
 
         // Call function
         $this->log_action('getRoutes');
         $result = $this->SoapEngine->soapclient->getRoutes($Query);
 
         if ($this->checkLogSoapError($result, true)) {
             return false;
         } else {
             if ($result->routes[0]) {
                 return $result->routes[0];
             } else {
                 return false;
             }
         }
     }
 
     function showRecord($route)
     {
         print "<h3>Route</h3>";
 
         printf("<form class = form-horizontal method=post name=addform action=%s>", $_SERVER['PHP_SELF']);
         print "<input type=hidden name=action value=Update>";
 
         foreach (array_keys($this->Fields) as $item) {
             if ($this->Fields[$item]['name']) {
                 $item_name = $this->Fields[$item]['name'];
             } else {
                 $item_name = ucfirst($item);
             }
 
             printf(
                 "
                 <div class=control-group>
                 <label class=control-label>%s</label>
                 ",
                 $item_name
             );
 
             if ($this->Fields[$item]['readonly']) {
                 printf(
                     "<div class=controls style='padding-top:5px'><input name=%s_form type=hidden value='%s'>%s</div>",
                     $item,
                     $route->$item,
                     $route->$item
                 );
             } else {
                 if ($item == 'carrier_id') {
                     printf("<div class=controls><select name=%s_form>", $item);
                     $selected_carrier[$route->$item] = 'selected';
                     foreach (array_keys($this->carriers) as $_carrier) {
                         printf(
                             "<option value='%s' %s>%s",
                             $_carrier,
                             $selected_carrier[$_carrier],
                             $this->carriers[$_carrier]
                         );
                     }
                     print "</select></div>";
                 } else {
                     printf(
                         "<div class=controls><input name=%s_form type=text value='%s'></div>",
                         $item,
                         $route->$item
                     );
                 }
             }
             print "</div>";
         }
 
         printf("<input type=hidden name=id_filter value='%s'>", $route->id);
 
         $this->printFiltersToForm();
         $this->printHiddenFormElements();
 
         print "
         <div class='form-actions'>
         <input class='btn btn-warning' type=submit value=Update>
         </div>
         ";
         print "</form>";
     }
 
     function updateRecord()
     {
         //print "<p>Updating route ...";
 
         if (!$_REQUEST['id_filter']) return;
 
         if (!$route = $this->getRecord($_REQUEST['id_filter'])) {
             return false;
         }
 
         foreach (array_keys($this->Fields) as $item) {
             $var_name = $item.'_form';
             if ($this->Fields[$item]['type'] == 'integer') {
                 $route->$item = intval($_REQUEST[$var_name]);
             } else {
                 $route->$item = trim($_REQUEST[$var_name]);
             }
         }
 
         $routes = array($route);
 
         $function = array(
             'commit'   => array(
                 'name'       => 'updateRoutes',
                 'parameters' => array($routes),
                 'logs'       => array('success' => sprintf('Route %d has been updated', $_REQUEST['id_filter']))
             )
         );
         return (bool)$this->SoapEngine->execute($function, $this->html);
     }
 }