Reworks question answer code (not yet quite localize friendly), but much clearer, faster, and shorter. Adds a Config.php flag to toggle on or off qa system. Adds a new summarization length. Adds timing code to test page options for qa system. Fixes a use of list() in Fetcher that could cause a crash. Adds code to make root purchase of ad credits easier, a=chris

Chris Pollett [2016-11-14 01:Nov:th]
Reworks question answer code (not yet quite localize friendly), but much clearer, faster, and shorter. Adds a Config.php flag to toggle on or off qa system. Adds a new summarization length. Adds timing code to test page  options for qa system. Fixes a use of list() in Fetcher that could cause a crash. Adds code to make root purchase of ad credits easier, a=chris
Filename
src/configs/Config.php
src/controllers/components/AdvertisementComponent.php
src/controllers/components/CrawlComponent.php
src/executables/ArcTool.php
src/executables/Fetcher.php
src/library/CrawlConstants.php
src/library/FetchUrl.php
src/library/PhraseParser.php
src/library/QuestionAnswerExtractor.php
src/library/TripletExtractor.php
src/library/media_jobs/FeedsUpdateJob.php
src/library/processors/ImageProcessor.php
src/locale/ar/configure.ini
src/locale/bn/configure.ini
src/locale/de/configure.ini
src/locale/en_US/configure.ini
src/locale/en_US/resources/Tokenizer.php
src/locale/es/configure.ini
src/locale/fa/configure.ini
src/locale/fr_FR/configure.ini
src/locale/he/configure.ini
src/locale/hi/configure.ini
src/locale/in_ID/configure.ini
src/locale/it/configure.ini
src/locale/ja/configure.ini
src/locale/kn/configure.ini
src/locale/ko/configure.ini
src/locale/nl/configure.ini
src/locale/pl/configure.ini
src/locale/pt/configure.ini
src/locale/ru/configure.ini
src/locale/te/configure.ini
src/locale/th/configure.ini
src/locale/tr/configure.ini
src/locale/vi_VN/configure.ini
src/locale/zh_CN/configure.ini
src/models/PhraseModel.php
src/privacy.php
src/views/SearchView.php
src/views/elements/PageoptionsElement.php
diff --git a/src/configs/Config.php b/src/configs/Config.php
index ee8c38e94..dbdb4d8a9 100755
--- a/src/configs/Config.php
+++ b/src/configs/Config.php
@@ -719,14 +719,16 @@ nsconddefine('MIRROR_NOTIFY_FREQUENCY', ONE_MINUTE);
 /** Max time before dirty index (queue_server) and
     filters (fetcher) will be force saved in seconds*/
 nsconddefine('FORCE_SAVE_TIME', ONE_HOUR);
-/** Number of seconds of no fetcher contact before crawl is deemed dead*/
+/** Number of seconds of no fetcher contact before crawl is deemed dead */
 nsdefine("CRAWL_TIME_OUT", 1800);
 /** maximum lenght of a  search query */
 nsconddefine('MAX_QUERY_TERMS', 10);
 /** maximum number of terms allowed in a conjunctive search query */
 nsconddefine('MAX_QUERY_LEN', 4096);
-/** When to switch to using suffice tree approach */
-nsconddefine('SUFFIX_TREE_THRESHOLD', 3);
+/** whether to use question answering system */
+nsconddefine('ENABLE_QUESTION_ANSWERING', true);
+/** Number of words until to switch from bag of words to phrase lookup */
+nsconddefine('PHRASE_THRESHOLD', 3);
 /** default number of search results to display per page */
 nsconddefine('NUM_RESULTS_PER_PAGE', 10);
 /** Number of recently crawled urls to display on admin screen */
diff --git a/src/controllers/components/AdvertisementComponent.php b/src/controllers/components/AdvertisementComponent.php
index 882b2e4cd..902e6bb43 100644
--- a/src/controllers/components/AdvertisementComponent.php
+++ b/src/controllers/components/AdvertisementComponent.php
@@ -88,7 +88,8 @@ class AdvertisementComponent extends Component
             isset($data['COST_AMOUNTS'][$_REQUEST['NUM_DOLLARS']])) ?
             $_REQUEST['NUM_DOLLARS'] : 0;
         $data['BALANCE'] = $credit_model->getCreditBalance($user_id);
-        if(C\CreditConfig::isActive()) {
+        if(C\CreditConfig::isActive() && (!($user_id == C\ROOT_ID &&
+            C\ALLOW_FREE_ROOT_CREDIT_PURCHASE))) {
             $data["INCLUDE_SCRIPTS"][] = 'credit';
             $ad_script_found = false;
             for ($i = C\YIOOP_VERSION; $i >= C\MIN_AD_VERSION; $i--) {
@@ -121,19 +122,21 @@ class AdvertisementComponent extends Component
                 $translate_holder = tl('advertisement_component_buy_credits');
                 $translate_holder = tl('advertisement_model_init_ledger');
                 $token = $parent->clean($_REQUEST['CREDIT_TOKEN'], "string");
-                $is_active = C\CreditConfig::isActive();
-                if ($is_active && empty($token)) {
-                    return $parent->redirectWithMessage(
-                        tl('advertisement_component_credit_token_empty'), []);
-                }
-                if ($is_active && !C\CreditConfig::charge(
-                    $num_dollars, $parent->clean(
-                    $_REQUEST['CREDIT_TOKEN'], "string"), $message)
-                    && !($user_id == C\ROOT_ID &&
+                if (!($user_id == C\ROOT_ID &&
                     C\ALLOW_FREE_ROOT_CREDIT_PURCHASE)) {
-                    return $parent->redirectWithMessage(
-                        tl('advertisement_component_processing_error',
-                            $message), []);
+                    $is_active = C\CreditConfig::isActive();
+                    if ($is_active && empty($token)) {
+                        return $parent->redirectWithMessage(
+                            tl('advertisement_component_credit_token_empty'),
+                            []);
+                    }
+                    if ($is_active && !C\CreditConfig::charge(
+                        $num_dollars, $parent->clean(
+                        $_REQUEST['CREDIT_TOKEN'], "string"), $message)) {
+                        return $parent->redirectWithMessage(
+                            tl('advertisement_component_processing_error',
+                                $message), []);
+                    }
                 }
                 $credit_model->updateCredits($user_id,
                     $data['COST_AMOUNTS'][$num_dollars],
diff --git a/src/controllers/components/CrawlComponent.php b/src/controllers/components/CrawlComponent.php
index db0e78d9f..1b5b3c3ca 100644
--- a/src/controllers/components/CrawlComponent.php
+++ b/src/controllers/components/CrawlComponent.php
@@ -879,8 +879,8 @@ class CrawlComponent extends Component implements CrawlConstants
         $data['SIZE_VALUES'] = [10000=>10000, 50000=>50000,
             100000=>100000, 500000=>500000, 1000000=>1000000,
             5000000=>5000000, 10000000=>10000000];
-        $data['LEN_VALUES'] = [2000=>2000, 10000=>10000, 50000=>50000,
-            100000=>100000, 500000=>500000, 1000000=>1000000,
+        $data['LEN_VALUES'] = [2000=>2000, 5000=>5000, 10000=>10000,
+            50000=>50000, 100000=>100000, 500000=>500000, 1000000=>1000000,
             5000000=>5000000, 10000000=>10000000];
         $data['available_summarizers'] = [
             self::BASIC_SUMMARIZER => tl('crawl_component_basic'),
@@ -1207,7 +1207,9 @@ class CrawlComponent extends Component implements CrawlConstants
             $parent->clean($_REQUEST['TESTPAGE'], 'string') : "";
         if ($data['option_type'] == 'test_options' && $data['TESTPAGE'] !="") {
             $data['SCRIPT'] .= "doMessage('<h1 class=\"red\" >".
-                tl('crawl_component_page_options_running_tests')."</h1>')";
+                tl('crawl_component_page_options_running_tests')."</h1>');";
+            $data['PROCESS_TIMES'] = [];
+            $start_time = microtime(true);
             $site = [];
             $site[self::ENCODING] = "UTF-8";
             $site[self::URL] = "http://test-site.yioop.com/";
@@ -1311,6 +1313,9 @@ class CrawlComponent extends Component implements CrawlConstants
             }
             $data["AFTER_PAGE_PROCESS"] = wordwrap($parent->clean(
                 print_r($after_process, true), "string"), 75, "\n", true);
+            $data['PROCESS_TIMES']['PAGE_PROCESS'] = L\changeInMicrotime(
+                $start_time);
+            $rule_time = microtime(true);
             $rule_string = implode("\n", $seed_info['page_rules']['rule']);
             $rule_string = html_entity_decode($rule_string, ENT_QUOTES);
             $page_rule_parser =
@@ -1325,6 +1330,9 @@ class CrawlComponent extends Component implements CrawlConstants
             $data["AFTER_RULE_PROCESS"] = wordwrap($parent->clean(
                 print_r($after_process, true), "string"), 75, "\n", true);
             $lang = null;
+            $data['PROCESS_TIMES']['RULE_PROCESS'] = L\changeInMicrotime(
+                $rule_time);
+            $rule_time = microtime(true);
             if (isset($site[self::LANG])) {
                 $lang = $site[self::LANG];
             }
@@ -1333,8 +1341,8 @@ class CrawlComponent extends Component implements CrawlConstants
                 $host_words = UrlParser::getWordsIfHostUrl($site[self::URL]);
                 $path_words = UrlParser::getWordsLastPathPartUrl(
                     $site[self::URL]);
-                $phrase_string = $host_words." ".$site[self::TITLE] .
-                    " ". $path_words . " ". $site[self::DESCRIPTION];
+                $phrase_string = $host_words." .. ".$site[self::TITLE] .
+                    " ..  ". $path_words . " .. ". $site[self::DESCRIPTION];
                 if ($site[self::TITLE] != "" ) {
                     $lang = L\guessLocaleFromString($site[self::TITLE], $lang);
                 } else {
@@ -1358,18 +1366,20 @@ class CrawlComponent extends Component implements CrawlConstants
             if (!isset($word_lists['WORD_LIST'])) {
                 $word_lists['WORD_LIST'] = [];
             }
-
             if (!isset($word_lists['QUESTION_ANSWER_LIST'])) {
                 $word_lists['QUESTION_ANSWER_LIST'] = [];
             }
-
             $data["EXTRACTED_WORDS"] = wordwrap($parent->clean(
-                print_r($word_lists, true), "string"), 75, "\n", true);
+                print_r($word_lists['WORD_LIST'], true), "string"),
+                75, "\n", true);
             $data["EXTRACTED_META_WORDS"] = wordwrap($parent->clean(
                 print_r($meta_ids, true), "string"), 75, "\n", true);
             $data["QUESTIONS_TRIPLET"] = wordwrap($parent->clean(
-                print_r($word_lists['QUESTION_ANSWER_LIST'], true),
+                print_r($word_lists['QUESTION_ANSWER_LIST'], true),
                 "string"), 75, "\n", true);
+            $data['PROCESS_TIMES']['TOTAL'] = L\changeInMicrotime($start_time);
+            $data['PROCESS_TIMES'] = array_merge($data['PROCESS_TIMES'],
+                $word_lists['TIMES']);
         }
         return $data;
     }
diff --git a/src/executables/ArcTool.php b/src/executables/ArcTool.php
index b6049cfc4..7c90ea23b 100755
--- a/src/executables/ArcTool.php
+++ b/src/executables/ArcTool.php
@@ -925,7 +925,7 @@ class ArcTool implements CrawlConstants
                                 mb_substr($site[self::DESCRIPTION], 0,
                                 C\AD_HOC_TITLE_LENGTH), $site[self::LANG]);
                         }
-                        $triplet_lists =
+                        $triplet_lists =
                             PhraseParser::extractPhrasesInLists($phrase_string,
                                 $lang);
                         $word_lists = $triplet_list['WORD_LIST'];
diff --git a/src/executables/Fetcher.php b/src/executables/Fetcher.php
index 7ce968dc0..a8bfd5a44 100755
--- a/src/executables/Fetcher.php
+++ b/src/executables/Fetcher.php
@@ -44,7 +44,6 @@ use seekquarry\yioop\library\PhraseParser;
 use seekquarry\yioop\library\processors\PageProcessor;
 use seekquarry\yioop\library\UrlParser;
 use seekquarry\yioop\library\WebArchiveBundle;
-use seekquarry\yioop\library\TripletExtractor;

 if (php_sapi_name() != 'cli') {echo "BAD REQUEST"; exit();}
 ini_set("memory_limit", "1200M"); //so have enough memory to crawl sitemaps
@@ -1737,6 +1736,7 @@ class Fetcher implements CrawlConstants
                 //if not UTF-8 convert before doing anything else
                 if (!empty($site[self::ENCODING]) &&
                     $site[self::ENCODING] != "UTF-8" && $text_data) {
+                    restore_error_handler();
                     if (!@mb_check_encoding($site[self::PAGE],
                         $site[self::ENCODING])) {
                         L\crawlLog("  MB_CHECK_ENCODING FAILED!!");
@@ -1757,10 +1757,11 @@ class Fetcher implements CrawlConstants
                              @mb_convert_encoding($site[self::PAGE],
                                 "UTF-8", $site[self::ENCODING]);
                     }
+                    set_error_handler(C\NS_LIB . "yioop_error_handler");
                 }
                 $page_processor = get_class($processor);
                 L\crawlLog("  Using Processor..." . substr($page_processor,
-                    strlen(C\NS_PROCESSORS)));
+                    strlen(C\NS_PROCESSORS)) . " for " . $site[self::URL]);
                 if (isset($site[self::REPOSITORY_TYPE]) &&
                     $site[self::REPOSITORY_TYPE] == self::REPOSITORY_GIT) {
                     $tmp_url_store = $site[self::URL];
@@ -1988,21 +1989,31 @@ class Fetcher implements CrawlConstants
         for ($i = 0; $i < $count; $i++) {
             L\crawlTimeoutLog("..still culling to crawl urls. Examining ".
                 "location %s in queue of %s.", $i, $count);
-            list($url, ) = $this->to_crawl[$i];
-            if (!$this->allowedToCrawlSite($url) ||
-                $this->disallowedToCrawlSite($url)) {
+            if(empty($this->to_crawl[$i][0])) {
                 unset($this->to_crawl[$i]);
                 $k++;
+            } else {
+                list($url, ) = $this->to_crawl[$i];
+                if (!$this->allowedToCrawlSite($url) ||
+                    $this->disallowedToCrawlSite($url)) {
+                    unset($this->to_crawl[$i]);
+                    $k++;
+                }
             }
         }
         for ($i = 0; $i < $count_again; $i++) {
             L\crawlTimeoutLog("..still culling to crawl again urls. Examining ".
                 "location %s in queue of %s.", $i, $count);
-            list($url, ) = $this->to_crawl_again[$i];
-            if (!$this->allowedToCrawlSite($url) ||
-                $this->disallowedToCrawlSite($url)) {
+            if (empty($this->to_crawl_again[$i][0])) {
                 unset($this->to_crawl_again[$i]);
                 $k++;
+            } else {
+                list($url, ) = $this->to_crawl_again[$i];
+                if (!$this->allowedToCrawlSite($url) ||
+                    $this->disallowedToCrawlSite($url)) {
+                    unset($this->to_crawl_again[$i]);
+                    $k++;
+                }
             }
         }
         L\crawlLog("...Removed $k cullable URLS  from to crawl lists in time: ".
@@ -2723,9 +2734,9 @@ class Fetcher implements CrawlConstants
                             self::LANG]])) {
                             $phrase_string = $site[self::DESCRIPTION];
                         } else {
-                            $phrase_string = $host_words." ".$site[self::TITLE]
-                                . " ". $path_words . " ". $site[self::
-                                    DESCRIPTION];
+                            $phrase_string = $host_words." .. ".
+                                $site[self::TITLE] . " ..  ".
+                                $path_words . " .. ". $site[self::DESCRIPTION];
                         }
                     } else {
                         $phrase_string = $host_words." ".$site[self::TITLE] .
@@ -2738,10 +2749,10 @@ class Fetcher implements CrawlConstants
                 $lang = L\guessLocaleFromString(
                     mb_substr($site[self::DESCRIPTION], 0,
                     C\AD_HOC_TITLE_LENGTH), $site[self::LANG]);
-                $triplet_lists =
+                $word_and_qa_lists =
                     PhraseParser::extractPhrasesInLists($phrase_string,
                         $lang);
-                $word_lists = $triplet_lists['WORD_LIST'];
+                $word_lists = $word_and_qa_lists['WORD_LIST'];
                 $len = strlen($phrase_string);
                 if (isset($this->programming_language_extension[$lang]) ||
                     PhraseParser::computeSafeSearchScore($word_lists, $len) <
@@ -2783,8 +2794,8 @@ class Fetcher implements CrawlConstants
                 $word_lists, $meta_ids, PhraseParser::$materialized_metas,
                 true, $doc_rank);

-            if(isset($triplet_lists['QUESTION_ANSWER_LIST'])) {
-                $question_list = $triplet_lists['QUESTION_ANSWER_LIST'];
+            if(isset($word_and_qa_lists['QUESTION_ANSWER_LIST'])) {
+                $question_list = $word_and_qa_lists['QUESTION_ANSWER_LIST'];
                 $site[self::QUESTION_TRIPLETS] = $question_list;
                 $this->found_sites[self::SEEN_URLS][$i] = $site;
             }
diff --git a/src/library/CrawlConstants.php b/src/library/CrawlConstants.php
index cc60a1541..d9c5e2064 100755
--- a/src/library/CrawlConstants.php
+++ b/src/library/CrawlConstants.php
@@ -233,4 +233,5 @@ interface CrawlConstants
     const SCRAPERS = 'dv';
     const IS_NEWS = "dw";
     const QUESTION_TRIPLETS = 'dx';
+    const CONTENT_LENGTH = 'dy';
 }
diff --git a/src/library/FetchUrl.php b/src/library/FetchUrl.php
index 21457cbb2..0c55d6e8c 100755
--- a/src/library/FetchUrl.php
+++ b/src/library/FetchUrl.php
@@ -261,6 +261,9 @@ class FetchUrl implements CrawlConstants
                 if (!$minimal) {
                     $sites[$i][self::SIZE] = @curl_getinfo($sites[$i][0],
                         CURLINFO_SIZE_DOWNLOAD);
+                    $site[$i][self::CONTENT_LENGTH] =
+                        @curl_getinfo($sites[$i][0],
+                        CURLINFO_CONTENT_LENGTH_DOWNLOAD);
                     $sites[$i][self::DNS_TIME] = @curl_getinfo($sites[$i][0],
                         CURLINFO_NAMELOOKUP_TIME);
                     $sites[$i][self::TOTAL_TIME] = @curl_getinfo($sites[$i][0],
diff --git a/src/library/PhraseParser.php b/src/library/PhraseParser.php
index 8f866e30f..76a0aead0 100755
--- a/src/library/PhraseParser.php
+++ b/src/library/PhraseParser.php
@@ -33,7 +33,7 @@ namespace seekquarry\yioop\library;
 use seekquarry\yioop\configs as C;
 use seekquarry\yioop\models\LocaleModel;
 use seekquarry\yioop\library\processors\PageProcessor;
-use seekquarry\yioop\library\TripletExtractor;
+use seekquarry\yioop\library\QuestionAnswerExtractor;

 /**
  * For crawlHash
@@ -159,10 +159,15 @@ class PhraseParser
                               stuff for now
                             */
         }
+        if (stristr($whole_phrase, QuestionAnswerExtractor::$question_marker)
+            !== false) {
+            $terms = [$whole_phrase, $terms[0]];
+            return $terms;
+        }
         $count_whole_phrase = IndexManager::numDocsTerm($whole_phrase,
             $index_name, $threshold);
         if ($count_whole_phrase >= $threshold
-            || $num > C\SUFFIX_TREE_THRESHOLD) {
+            || $num > C\PHRASE_THRESHOLD) {
             $terms = [$whole_phrase, $terms[0]];
             return $terms;
         } else if ($count_whole_phrase > 0) {
@@ -217,7 +222,6 @@ class PhraseParser
         foreach ($phrases as $term => $positions) {
             $phrase_counts[$term] = count($positions);
         }
-
         return $phrase_counts;
     }
     /**
@@ -225,28 +229,45 @@ class PhraseParser
      * extract terms within those phrase.
      *
      * @param string $string subject to extract phrases from
-     * @param string $lang locale tag for stemming
+     * @param string $lang locale tag for stemming and other phrase processing
+     *      related stuff
      * @return array word => list of positions at which the word occurred in
      *     the document
      */
     public static function extractPhrasesInLists($string, $lang = null)
     {
+        $start_time = microtime(true);
+        $phrase_list = ['TIMES' => [
+            'CANONICALIZE' => 0, 'MAXIMAL_TERMS' => 0,
+            'QUESTION_ANSWER_EXTRACT' => 0]];
         if (!isset(self::$programming_language_map[$lang])) {
             self::canonicalizePunctuatedTerms($string, $lang);
+            $phrase_list['TIMES']['CANONICALIZE'] =
+                changeInMicrotime($start_time);
+        }
+        $maximal_terms_start_time = microtime(true);
+        $phrase_and_sentences = self::extractMaximalTermsAndFilterPhrases(
+            $string, $lang, C\ENABLE_QUESTION_ANSWERING);
+        $phrase_list['TIMES']['MAXIMAL_TERMS'] =
+            changeInMicrotime($maximal_terms_start_time);
+        if (C\ENABLE_QUESTION_ANSWERING &&
+            !empty($phrase_and_sentences["SENTENCES"])) {
+            $qa_start_time = microtime(true);
+            $tokenizer = self::getTokenizer($lang);
+            if (method_exists($tokenizer, "tagTokenizePartOfSpeech")) {
+                $triplets_list =
+                    QuestionAnswerExtractor::extractTripletsPhrases(
+                        $phrase_and_sentences["SENTENCES"], $lang);
+                $phrase_and_sentences["TERMS_AND_PHRASES"] =
+                    array_merge($phrase_and_sentences["TERMS_AND_PHRASES"],
+                    $triplets_list['QUESTION_LIST']);
+                $phrase_list['QUESTION_ANSWER_LIST'] =
+                    $triplets_list['QUESTION_ANSWER_LIST'];
+                $phrase_list['TIMES']['QUESTION_ANSWER_EXTRACT'] =
+                    changeInMicrotime($qa_start_time);
+            }
         }
-        $phrase_list = array();
-        $word_lists = self::extractMaximalTermsAndFilterPhrases(
-            $string, $lang);
-        // COMMENT BELOW CODE IN IF TO DISABLE QUESTION ANSWERING SYSTEM
-        if (isset($word_lists)) {
-            $triplets_list =
-                TripletExtractor::storeStatementArraysAsTriplet($word_lists);
-            $word_lists =
-                array_merge($word_lists, $triplets_list['QUESTION_LIST']);
-            $phrase_list['QUESTION_ANSWER_LIST'] =
-                $triplets_list['QUESTION_ANSWER_LIST'];
-        }
-        $phrase_list['WORD_LIST'] = $word_lists;
+        $phrase_list['WORD_LIST'] = $phrase_and_sentences["TERMS_AND_PHRASES"];
         return $phrase_list;
     }
     /**
@@ -308,7 +329,7 @@ class PhraseParser
      *     string
      */
     public static function extractMaximalTermsAndFilterPhrases($string,
-        $lang = null)
+        $lang = null, $extract_sentences = false)
     {
         $pos_lists = [];
         $maximal_phrases = [];
@@ -329,7 +350,27 @@ class PhraseParser
             $maximal_phrases[$term][] = $t;
             $t++;
         }
-        return $maximal_phrases;
+        $out["TERMS_AND_PHRASES"] = $maximal_phrases;
+        $tokenizer = self::getTokenizer($lang);
+        if ($extract_sentences && method_exists($tokenizer,
+            "tagTokenizePartOfSpeech") &&
+            !isset(self::$programming_language_map[$lang])) {
+            $string = mb_strtolower($string);
+            $sentences = preg_split("/(\n\n+)|\.|\!|\?|。/u", $string);
+            $pos = 0;
+            $sentences_pos = [];
+            $sentences = array_filter($sentences);
+            foreach ($sentences as $sentence) {
+                if (empty($sentences_pos[$sentence])) {
+                    $sentences_pos[$sentence] = [$pos];
+                } else {
+                    $sentences_pos[$sentence][] = $pos;
+                }
+                $pos += str_word_count($sentence);
+            }
+            $out["SENTENCES"] = $sentences_pos;
+        }
+        return $out;
     }
     /**
      * Given a string splits it into terms by running any applicable
@@ -338,10 +379,14 @@ class PhraseParser
      * @param string $string what to extract terms from
      * @param string $lang locale tag to determine which stemmers, chargramming
      *     and segmentation needs to be done.
+     * @param bool $to_string if the result should be imploded on space to
+     *      a single string or left as an array of terms
      *
-     * @return array the terms computed from the string
+     * @return mixed either an array of the terms computed from the string
+     *  or a string where this array has been imploded on space
      */
-    public static function stemCharGramSegment($string, $lang)
+    public static function stemCharGramSegment($string, $lang,
+        $to_string = false)
     {
         if (isset(self::$programming_language_map[$lang])) {
             mb_internal_encoding("UTF-8");
@@ -356,6 +401,9 @@ class PhraseParser
             $terms = self::charGramTerms($terms, $lang);
             $terms = self::stemTerms($terms, $lang);
         }
+        if ($to_string) {
+            return implode(" ", $terms);
+        }
         return $terms;
     }
     /**
@@ -765,7 +813,7 @@ class PhraseParser
      * Loads and instantiates a tokenizer object for a language if exists
      *
      * @param string $lang IANA tag to look up stemmer under
-     * @return object tokenizer object
+     * @return object tokenizer with methods to process strings for a language
      */
     public static function getTokenizer($lang)
     {
@@ -1264,12 +1312,11 @@ vaffanculo fok hoer kut lul やりまん 打っ掛け
 賣豆腐 咪咪 大豆腐 爆乳 肏操
 炒饭 炒飯 cặc lồn kaltak orospu siktir sıçmak amcık";
         static $unsafe_terms = [];
-
         if (count($word_lists) == 0) {
             return 0;
         }
         if ($unsafe_terms == []) {
-             $triplet_list = PhraseParser::extractPhrasesInLists($unsafe_phrase,
+            $triplet_list = PhraseParser::extractPhrasesInLists($unsafe_phrase,
                  "en-US");
             $unsafe_lists = $triplet_list['WORD_LIST'];
             $unsafe_terms = array_keys($unsafe_lists);
@@ -1277,7 +1324,6 @@ vaffanculo fok hoer kut lul やりまん 打っ掛け
         $num_unsafe_terms = 0;
         $unsafe_count = 0;
         $words = array_keys($word_lists);
-
         $unsafe_found = array_intersect($words, $unsafe_terms);
         foreach ($unsafe_found as $term) {
             $count = count($word_lists[$term]);
@@ -1301,12 +1347,12 @@ vaffanculo fok hoer kut lul やりまん 打っ掛け
     {
         $result = $sentence_to_compress;
         if (C\SENTENCE_COMPRESSION_ENABLED) {
-            if ($lang != null) {
+            if (!empty($lang)) {
                 $segment_obj = self::getTokenizer($lang);
             } else {
                 $segment_obj = null;
             }
-            if ($segment_obj != null && method_exists($segment_obj,
+            if (!empty($segment_obj) && method_exists($segment_obj,
                 "compressSentence")) {
                 $result =
                     $segment_obj->compressSentence($sentence_to_compress);
diff --git a/src/library/QuestionAnswerExtractor.php b/src/library/QuestionAnswerExtractor.php
new file mode 100644
index 000000000..53b27280e
--- /dev/null
+++ b/src/library/QuestionAnswerExtractor.php
@@ -0,0 +1,748 @@
+<?php
+/**
+ * SeekQuarry/Yioop --
+ * Open Source Pure PHP Search Engine, CCONCISEler, and Indexer
+ *
+ * Copyright (C) 2009 - 2015  Chris Pollett chris@pollett.org
+ *
+ * LICENSE:
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @author Chris Pollett chris@pollett.org
+ * @license http://www.gnu.org/licenses/ GPL3
+ * @link http://www.seekquarry.com/
+ * @copyright 2009 - 2016
+ * @filesource
+ */
+namespace seekquarry\yioop\library;
+
+use seekquarry\yioop\configs as C;
+use seekquarry\yioop\library as L;
+
+/**
+ * A class to extract triplet so that they may be used as part of a question
+ * answering system
+ *
+ * @author Nirav Patel (revisited by Salil Shenoy, code clean up pass
+ * Chris Pollett)
+ * @package seekquarry\yioop\library
+ */
+class QuestionAnswerExtractor
+{
+    /**
+     * Any unique identifier corresponding to the component of a triplet which
+     * can be answered using a question answer list
+     * @string
+     */
+    public static $question_marker = "qqq";
+    /**
+     * @array
+     */
+    public static $verb_phrases = ["VB", "VBD", "VBG", "VBN", "VBP",
+        "VBZ"];
+    /**
+     * @array
+     */
+    public static $noun_phrases = ["NN", "NNS", "NNP", "NNPS", "PRP"];
+    /**
+     * @array
+     */
+    public static $adjective_phrases = ["JJ", "JJR", "JJS"];
+    /**
+     * Given a part-of-speeech tagged phrase array generates a parse tree
+     * for the phrase using a recursive descent parser.
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @return array used to represent a tree. The array has up to three fields
+     *      $tree["cur_node"] index of how far we parsed our$tagged_phrase
+     *      $tree["NP"] contains a subtree for a noun phrase
+     *      $tree["VP"] contains a subtree for a verb phrase
+     */
+    public static function generatePhraseParseTree($tagged_phrase)
+    {
+        $tree = [];
+        //cur_node is the index in tagged_phrase we've parse to so far
+        $tree_np = self::extractNounPhrase($tagged_phrase, ["cur_node" => 0]);
+        $tree = ["cur_node" => $tree_np['cur_node']];
+        $tree_vp = self::extractVerbPhrase($tagged_phrase, $tree);
+        if ($tree == $tree_vp) {
+            return $tree;
+        }
+        $tree['cur_node'] = $tree_vp['cur_node'];
+        unset($tree_np['cur_node']);
+        unset($tree_vp['cur_node']);
+        $tree['NP'] = $tree_np['NP'];
+        $tree['VP'] = $tree_vp['VP'];
+        return $tree;
+    }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for a noun phrase if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["curnode" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      "NP" a subarray with possible fields
+     *      "DT" with value a determiner subtree
+     *      "JJ" with value an adjective subtree
+     *      "NN" with value a noun tree
+     */
+    public static function extractNounPhrase($tagged_phrase, $tree)
+    {
+        $cur_node = $tree['cur_node'];
+        $tree_dt = self::extractDeterminer($tagged_phrase,
+            ['cur_node' => $cur_node]);
+        $tree_jj = self::extractAdjective($tagged_phrase,
+            ['cur_node' => $tree_dt['cur_node']]);
+        $tree_nn = self::extractNoun($tagged_phrase,
+            ['cur_node' => $tree_jj['cur_node']]);
+        $tree_pp = self::extractPrepositionalPhrases($tagged_phrase,
+            ['cur_node' => $tree_nn['cur_node']]);
+        if ($tree_nn['cur_node'] == $cur_node) {
+            $tree['NP'] = "";
+        } else {
+            $cur_node = $tree_pp['cur_node'];
+            unset($tree_dt['cur_node']);
+            $tree_new_sub['DT'] = $tree_dt;
+            unset($tree_jj['cur_node']);
+            $tree_new_sub['JJ'] = $tree_jj;
+            unset($tree_nn['cur_node']);
+            $tree_new_sub['NN'] = $tree_nn;
+            unset($tree_pp['cur_node']);
+            $tree_new_sub['PRP'] = $tree_pp;
+            $tree_new['cur_node'] = $cur_node;
+            $tree_new['NP'] = $tree_new_sub;
+            return $tree_new;
+        }
+        return $tree;
+    }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for a verb phrase if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["curnode" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      "VP" a subarray with possible fields
+     *      "VB" with value a verb subtree
+     *      "NP" with value an noun phrase subtree
+     */
+    public static function extractVerbPhrase($tagged_phrase, $tree)
+    {
+        $cur_node = $tree['cur_node'];
+        $tree_vb = self::extractVerb($tagged_phrase, ['cur_node' => $cur_node]);
+        if ($tree_vb['cur_node'] == $cur_node) {
+            return $tree;
+        }
+        $cur_node = $tree_vb['cur_node'];
+        $preposition_string = "";
+        while (isset($tagged_phrase[$cur_node]['tag']) &&
+            trim($tagged_phrase[$cur_node]['tag']) == "IN") {
+            $preposition_string .= " ". $tagged_phrase[$cur_node]['token'];
+            $cur_node++;
+        }
+        if (!empty($preposition_string)) {
+            $tree_vb["IN"] = $preposition_string;
+        }
+        $tree_np = self::extractNounPhrase($tagged_phrase,
+            ['cur_node' => $cur_node]);
+        $tree_new = [];
+        $tree_new_sub = [];
+        if ($tree_np['cur_node'] !=  $cur_node) {
+            $cur_node = $tree_np['cur_node'];
+            unset($tree_vb['cur_node']);
+            unset($tree_np['cur_node']);
+            $tree_new_sub['VB'] = $tree_vb;
+            $tree_new_sub['NP'] = $tree_np['NP'];
+            $tree_new['cur_node'] = $cur_node;
+            $tree_new['VP'] = $tree_new_sub;
+            return $tree_new;
+        }
+        unset($tree_vb['cur_node']);
+        $tree_new_sub['VB'] = $tree_vb;
+        $tree_new['cur_node'] = $cur_node;
+        $tree_new['VP'] = $tree_new_sub;
+        return $tree_new;
+    }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for a determiner if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["curnode" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      "DT" a subarray with a token node for the determiner that was
+     *      parsed
+     */
+    public static function extractDeterminer($tagged_phrase, $tree)
+    {
+        $cur_node = $tree['cur_node'];
+        if (isset($tagged_phrase[$cur_node]['tag']) &&
+            trim($tagged_phrase[$cur_node]['tag']) == "DT" ) {
+            $tree['DT'] = $tagged_phrase[$cur_node]['token'];
+            $tree['cur_node']++;
+            return $tree;
+        }
+        return $tree;
+    }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for an adjective if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["cur_node" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      "JJ" a subarray with a token node for the adjective that was
+     *      parsed
+     */
+    public static function extractAdjective($tagged_phrase, $tree)
+    {
+        $adjective_string = "";
+        $cur_node = $tree['cur_node'];
+        while (isset($tagged_phrase[$cur_node]['tag']) &&
+           in_array(trim($tagged_phrase[$cur_node]['tag']),
+           self::$adjective_phrases)) {
+           $adjective_string .= " " . $tagged_phrase[$cur_node]['token'];
+           $cur_node++;
+       }
+       if (!empty($adjective_string)) {
+           $tree["JJ"] = $adjective_string;
+       }
+       $tree['cur_node'] = $cur_node;
+       return $tree;
+   }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for a noun if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["curnode" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      "NN" a subarray with a token node for the noun string that was
+     *      parsed
+     */
+    public static function extractNoun($tagged_phrase, $tree)
+    {
+        //Combining multiple noun into one
+        $noun_string = "";
+        $cur_node = $tree['cur_node'];
+        while (isset($tagged_phrase[$cur_node]['tag']) &&
+            (in_array(trim($tagged_phrase[$cur_node]['tag']),
+            self::$noun_phrases))) {
+            $noun_string .= " " . $tagged_phrase[$cur_node]['token'];
+            $cur_node++;
+        }
+        if (!empty($noun_string)) {
+            $tree["NN"] = $noun_string;
+        }
+        $tree['cur_node'] = $cur_node;
+        return $tree;
+    }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for a sequence of
+     * prepositional phrases if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["cur_node" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      parsed followed by additional possible fields (here i
+     *      represents the ith clause found):
+     *      "IN_i" with value a preposition subtree
+     *      "DT_i" with value a determiner subtree
+     *      "JJ_i" with value an adjective subtree
+     *      "NN_i"  with value an additional noun subtree
+     */
+    public static function extractPrepositionalPhrases($tagged_phrase, $tree,
+        $index = 1)
+    {
+       $cur_node = $tree['cur_node'];
+        // Checking for preposition.I.e, format: prep [det] [adjective] noun
+        if (isset($tagged_phrase[$cur_node]['tag']) &&
+            trim($tagged_phrase[$cur_node]['tag']) == "IN") {
+            /* can have multiple prep's in a row, for example,
+               it is known in over 20 countries*/
+            $preposition_string = "";
+            while (isset($tagged_phrase[$cur_node]['tag']) &&
+                trim($tagged_phrase[$cur_node]['tag']) == "IN") {
+                $preposition_string .= " ". $tagged_phrase[$cur_node]['token'];
+                $cur_node++;
+            }
+            if (!empty($preposition_string)) {
+                $tree["IN_$index"] = $preposition_string;
+            }
+            if (isset($tagged_phrase[$cur_node]['tag']) &&
+                trim($tagged_phrase[$cur_node]['tag']) == "DT") {
+                $tree['DT_$index'] = $tagged_phrase[$cur_node]['token'];
+                $cur_node++;
+            }
+            $adjective_string = "";
+            while (isset($tagged_phrase[$cur_node]['tag']) &&
+                in_array(trim($tagged_phrase[$cur_node]['tag']),
+                self::$adjective_phrases)) {
+                $adjective_string .= " " . $tagged_phrase[$cur_node]['token'];
+                $cur_node++;
+            }
+            if (!empty($adjective_string)) {
+                $tree["JJ_$index"] = $adjective_string;
+            }
+            $prep_noun_string = "";
+            while (isset($tagged_phrase[$cur_node]['tag']) &&
+                in_array(trim($tagged_phrase[$cur_node]['tag']),
+                self::$noun_phrases)) {
+                $prep_noun_string .= " " . $tagged_phrase[$cur_node]['token'];
+                $cur_node++;
+            }
+            if ($prep_noun_string) {
+                $tree["NP_$index"] = $prep_noun_string;
+            }
+            $tree_next = self::extractPrepositionalPhrases($tagged_phrase,
+                ["cur_node" => $cur_node], $index + 1);
+        }
+        $tree['cur_node'] = $cur_node;
+        return $tree;
+    }
+    /**
+     * Takes a part-of-speech tagged phrase and pre-tree with a
+     * parse-from position and builds a parse tree for a verb if possible
+     *
+     * @param array $tagged_phrase
+     *      an array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term)
+     * @param array $tree that consists of ["curnode" =>
+     *      current parse position in $tagged_phrase]
+     * @return array has fields
+     *      "cur_node" index of how far we parsed $tagged_phrase
+     *      "VB" a subarray with a token node for the verb string that was
+     *      parsed
+     */
+    public static function extractVerb($tagged_phrase, $tree)
+    {
+        $cur_node = $tree['cur_node'];
+        // skip stuff before verb (intensifiers and adverbs)
+        while (isset($tagged_phrase[$cur_node]['tag']) &&
+            !in_array(trim($tagged_phrase[$cur_node]['tag']),
+            self::$verb_phrases)) {
+            $cur_node++;
+        }
+        $verb_string = "";
+        while (isset($tagged_phrase[$cur_node]['tag']) &&
+            in_array(trim($tagged_phrase[$cur_node]['tag']),
+            self::$verb_phrases)) {
+            $verb_string .= " " . $tagged_phrase[$cur_node]['token'];
+            $cur_node++;
+        }
+        if (!empty($verb_string)) {
+            $tree["VB"] = $verb_string;
+        }
+        $tree['cur_node'] = $cur_node;
+        return $tree;
+   }
+    /**
+     * Takes a parse tree of a phrase and computes subject, predicate, and
+     * object arrays. Each of these array consists of two components CONCISE and
+     * RAW, CONCISE corresponding to something more similar to the words in the
+     * original phrase and RAW to the case where extraneous words have been
+     * removed
+     *
+     * @param are $parse_tree a parse tree for a sentence
+     * @return array triplet array
+     */
+    public static function extractTripletsParseTree($tree)
+    {
+        $triplets = [];
+        $triplets['subject'] = self::extractSubjectParseTree($tree);
+        $triplets['predicate'] = self::extractPredicateParseTree($tree);
+        $triplets['object'] = self::extractObjectParseTree($tree);
+        return $triplets;
+    }
+    /**
+     * Takes a triplets array with subject, predicate, object fields with
+     * CONCISE and RAW subfields and rearranges it to have two fields CONCISE
+     * and RAW with subject, predicate, object, and QUESTION_ANSWER_LIST
+     * subfields
+     *
+     * @param array $sub_pred_obj_triplets in format described above
+     * @param string $lang locale tag for stem chargramming and segmenting
+     * @return array $processed_triplets in format described above
+     */
+    public static function rearrangeTripletsByType($sub_pred_obj_triplets,
+        $lang)
+    {
+        $processed_triplet = [];
+        $processed_triplets['CONCISE'] =
+            self::extractTripletByType($sub_pred_obj_triplets, "CONCISE",
+            $lang);
+        $processed_triplets['RAW'] =
+            self::extractTripletByType($sub_pred_obj_triplets, "RAW", $lang);
+        return $processed_triplets;
+    }
+    /**
+     * Takes a triplets array with subject, predicate, object fields with
+     * CONCISE, RAW subfields and produces a triplits with $type subfield (where
+     * $type is one of CONCISE and RAW) and with subject, predicate, object,
+     * and QUESTION_ANSWER_LIST subfields
+     *
+     * @param array $sub_pred_obj_triplets  in format described above
+     * @param string $lang locale tag for stem chargramming and segmentin
+     * @return array $triplets in format described above
+     */
+    public static function extractTripletByType($sub_pred_obj_triplets, $type,
+        $lang)
+    {
+        $triplets = [];
+        if (!empty($sub_pred_obj_triplets['subject'][$type])
+            && !empty($sub_pred_obj_triplets['predicate'][$type])
+            && !empty($sub_pred_obj_triplets['object'][$type])) {
+            $question_answer_triplets = [];
+            $question_marker = self::$question_marker;
+            $tokenizer = PhraseParser::getTokenizer($lang);
+            $sentence = [ trim($sub_pred_obj_triplets['subject'][$type]),
+                trim($sub_pred_obj_triplets['predicate'][$type]),
+                trim($sub_pred_obj_triplets['object'][$type])];
+            $parts = ['subject', 'predicate', 'object'];
+            for ($i = 0; $i < 3; $i++) {
+                $q_sentence = $sentence;
+                $q_sentence[$i] = $question_marker;
+                $q_sentence_string = implode(" ", $q_sentence);
+                $q_sentence_string = PhraseParser::stemCharGramSegment(
+                    $q_sentence_string, $lang, true);
+                $triplets[$parts[$i]] = $q_sentence_string;
+                $question_answer_triplets[$q_sentence_string] =
+                    PhraseParser::stemCharGramSegment($sentence[$i], $lang,
+                    true);
+            }
+            $triplets['QUESTION_ANSWER_LIST'] = $question_answer_triplets;
+        }
+        return $triplets;
+    }
+    /**
+     * Takes a parse tree of a phrase or statement and returns an array
+     * with two fields CONCISE and RAW the former having the subject of
+     * the original phrase (as a string) the latter having the importart
+     * parts of the subject
+     *
+     * @param array representation of a parse tree of a phrase
+     * @return array with two fields CONCISE and RAW as described above
+     */
+    public static function extractSubjectParseTree($tree)
+    {
+        $subject = [];
+        if (!empty($tree['NP'])) {
+            $subject['CONCISE'] = self::extractDeepestSpeechPartPhrase(
+                $tree['NP'], "NN");
+            $raw_subject = "";
+            $it = new \RecursiveIteratorIterator(
+                new \RecursiveArrayIterator($tree['NP']));
+            foreach ($it as $v) {
+                $raw_subject .= $v . " ";
+            }
+            $subject['RAW'] = $raw_subject;
+        } else {
+            $subject['CONCISE'] = "";
+            $subject['RAW'] = "";
+        }
+        return $subject;
+    }
+
+    /**
+     * Takes a parse tree of a phrase or statement and returns an array
+     * with two fields CONCISE and RAW the former having the predicate of
+     * the original phrase (as a string) the latter having the importart
+     * parts of the predicate
+     *
+     * @param array representation of a parse tree of a phrase
+     * @return array with two fields CONCISE and RAW as described above
+     */
+    public static function extractPredicateParseTree($tree)
+    {
+        $predicate = [];
+        if (!empty($tree['VP'])) {
+            $tree_vp = $tree['VP'];
+            $predicate['CONCISE'] = self::extractDeepestSpeechPartPhrase(
+                $tree_vp, "VB");
+            $raw_predicate = "";
+            if (!empty($tree_vp['VB'])) {
+                $tree_vb = $tree_vp['VB'];
+                $it = new \RecursiveIteratorIterator(
+                    new \RecursiveArrayIterator($tree_vb));
+                foreach ($it as $v) {
+                    $raw_predicate .= $v . " ";
+                }
+                $predicate['RAW'] = $raw_predicate;
+            }
+        } else {
+            $predicate['CONCISE'] = "";
+            $predicate['RAW'] = "";
+        }
+        return $predicate;
+    }
+    /**
+     * Takes a parse tree of a phrase or statement and returns an array
+     * with two fields CONCISE and RAW the former having the object of
+     * the original phrase (as a string) the latter having the importart
+     * parts of the object
+     *
+     * @param array representation of a parse tree of a phrase
+     * @return array with two fields CONCISE and RAW as described above
+     */
+    public static function extractObjectParseTree($tree)
+    {
+        $object = [];
+        if (!empty($tree['VP'])) {
+            $tree_vp = $tree['VP'];
+            if (!empty($tree_vp['NP'])) {
+                $nb = $tree_vp['NP'];
+                $object['CONCISE'] = self::extractDeepestSpeechPartPhrase($nb,
+                    "NN");
+                $raw_object = "";
+                $it = new \RecursiveIteratorIterator(
+                    new \RecursiveArrayIterator($nb));
+                foreach ($it as $v) {
+                    $raw_object .= $v . " ";
+                }
+                $object['RAW'] = $raw_object;
+            } else {
+                $object['CONCISE'] = "";
+                $object['RAW'] = "";
+            }
+        } else {
+            $object['CONCISE'] = "";
+            $object['RAW'] = "";
+        }
+        return $object;
+    }
+    /**
+     * Takes phrase tree $tree and a part-of-speech $pos returns
+     * the deepest $pos only path in tree.
+     *
+     * @param $tree phrase to extract type from
+     * @return string deepest verb
+     */
+    public static function extractDeepestSpeechPartPhrase($tree, $pos)
+    {
+        $extract = "";
+        if (!empty($tree[$pos])) {
+            $extract = self::extractDeepestSpeechPartPhrase($tree[$pos], $pos);
+        }
+        if (!$extract && !empty($tree[$pos]) && !empty($tree[$pos][$pos])) {
+            $extract = $tree[$pos][$pos];
+        }
+        return $extract;
+    }
+    /**
+     * Takes the phrase and apply the rules in the defined in the
+     * lexicon, assign parts of speech and generate a triplet tree.
+     *
+     * @param $phrase any phrase to be converted into triplets
+     * @param string $lang locale tag to tag parts of speech in phrase
+     * @return array question triplets extracted from phrase
+     */
+    public static function extractTripletsPhrase($phrase, $lang)
+    {
+        $tokenizer = PhraseParser::getTokenizer($lang);
+        $tagged_phrase = $tokenizer->tagTokenizePartOfSpeech($phrase);
+        $parse_tree = self::generatePhraseParseTree($tagged_phrase);
+        $triplets = self::extractTripletsParseTree($parse_tree);
+        return self::rearrangeTripletsByType($triplets, $lang);
+    }
+    /**
+     * Scans a word list for phrases. For phrases found generate
+     * a list of question and answer pairs at two levels of granularity:
+     * CONCISE (using all terms in orginal phrase) and RAW (removing
+     * (adjectives, etc).
+     *
+     * @param array $word_and_phrase_list of statements
+     * @param string $lang locale tag to tag parts of speech in phrase
+     * @return array with two fields: QUESTION_LIST consisting of triplets
+     *      (SUBJECT, PREDICATES, OBJECT) where one of the components has been
+     *      replaced with a question marker.
+     */
+    public static function extractTripletsPhrases($word_and_phrase_list,
+        $lang)
+    {
+        $triplets_list = [];
+        $question_list = [];
+        $question_answer_list = [];
+        $word_and_phrase_list = array_filter($word_and_phrase_list,
+            function ($key) {
+                return str_word_count($key) >= C\PHRASE_THRESHOLD;
+            }, \ARRAY_FILTER_USE_KEY );
+        $triplet_types = ['CONCISE', 'RAW'];
+        $triplet_parts = ['subject', 'predicate', 'object'];
+        foreach ($word_and_phrase_list as $word_and_phrase => $position_list) {
+            $extracted_triplets = self::extractTripletsPhrase(
+                $word_and_phrase, $lang);
+            foreach ($triplet_types as $type) {
+                if (!empty($extracted_triplets[$type])) {
+                    $triplet = $extracted_triplets[$type];
+                    foreach ($triplet_parts as $part) {
+                        if(!empty($triplet[$part])) {
+                            $question_list[$triplet[$part]] = $position_list;
+                        }
+                    }
+                    $question_answer_list = array_merge($question_answer_list,
+                        $triplet['QUESTION_ANSWER_LIST']);
+                }
+            }
+        }
+        $triplets_list['QUESTION_LIST'] = $question_list;
+        $triplets_list['QUESTION_ANSWER_LIST'] = $question_answer_list;
+        return $triplets_list;
+    }
+    /**
+     * Takes any question started with WH question and returns the
+     * triplet from the question
+     *
+     * @param string $question question to parse
+     * @param string $lang locale tag to tag parts of speech in phrase
+     * @return array question triplet
+     */
+    public static function questionParser($question, $lang)
+    {
+        $tokenizer = PhraseParser::getTokenizer($lang);
+        $tagged_question = $tokenizer->tagTokenizePartOfSpeech($question);
+        $generated_question_array = [];
+        if (isset($tagged_question[0])) {
+            if (in_array(trim($tagged_question[0]['tag']),
+                ["WRB", "WP"])) {
+                $token = strtoupper(trim($tagged_question[0]['token']));
+                if ($token == "WHO") {
+                    $generated_question_array = self::parseWhoQuestion(
+                        $tagged_question, 1);
+                } else if (in_array($token, ["WHERE", "WHEN", "WHAT"])) {
+                    $generated_question_array = self::parseWHPlusQuestion(
+                        $tagged_question, 1);
+                }
+            }
+        }
+        return $generated_question_array;
+    }
+    /**
+     * Takes tagged question string starts with Who
+     * and returns question triplet from the question string
+     *
+     * @param string $tagged_question part-of-speech tagged question
+     * @param int $index current index in statement
+     * @return array parsed triplet
+     */
+    public static function parseWhoQuestion($tagged_question, $index)
+    {;
+        $generated_questions = [];
+        $question_marker = self::$question_marker;
+        $tree = ["cur_node" => $index];
+        $tree['NP'] = "WHO";
+        $triplets = [];
+        $tree_vp = self::extractVerbPhrase($tagged_question, $tree);
+        $triplets['predicate'] = self::extractPredicateParseTree(
+            $tree_vp);
+        $triplets['object'] = self::extractObjectParseTree(
+            $tree_vp);
+        $triplet_types = ['CONCISE', 'RAW'];
+        foreach ($triplet_types as $type) {
+            if (!empty($triplets['object'][$type])
+                && !empty($triplets['predicate'][$type])) {
+                $generated_questions[$type][] =
+                    trim($triplets['object'][$type]) .
+                    " " . trim($triplets['predicate'][$type]) . " " .
+                    $question_marker;
+                $generated_questions[$type][] = $question_marker .
+                    " " . trim($triplets['predicate'][$type]) .
+                    " " . trim($triplets['object'][$type]);
+            }
+        }
+        return $generated_questions;
+    }
+    /**
+     * Takes tagged question string starts with Wh+ except Who
+     * and returns question triplet from the question string
+     * Unlike the WHO case, here we assume there is an auxliary verb
+     * followed by a noun phrase then the rest of the verb phrase. For example,
+     * Where is soccer played?
+     *
+     * @param string $tagged_question part-of-speech tagged question
+     * @param $index current index in statement
+     * @return array parsed triplet suitable for query look-up
+     */
+    public static function parseWHPlusQuestion($tagged_question, $index)
+    {
+        $generated_questions = [];
+        $aux_verb = "";
+        $question_marker = self::$question_marker;
+        while (isset($tagged_question[$index]) &&
+            in_array(trim($tagged_question[$index]['tag']),
+            self::$verb_phrases)) {
+            $token = trim($tagged_question[$index]['token']);
+            $aux_verb .= " " . $token;
+            $index++;
+        }
+        $tree = ["cur_node" => $index];
+        $tree['NP'] = "WHPlus";
+        $triplets = [];
+        $tree_np = self::extractNounPhrase($tagged_question, $tree);
+        $triplets['subject'] = self::extractSubjectParseTree($tree_np);
+        $tree_vp = self::extractVerbPhrase($tagged_question, $tree_np);
+        $triplets['predicate'] = self::extractPredicateParseTree($tree_vp);
+        if (!empty($aux_verb)) {
+            $triplets['predicate']['CONCISE'] = trim($aux_verb) .
+                " " . $triplets['predicate']['CONCISE'];
+            if (!isset($triplets['predicate']['RAW'])) {
+                $triplets['predicate']['RAW'] = "";
+            }
+            $triplets['predicate']['RAW'] = trim($aux_verb) .
+                " " . $triplets['predicate']['RAW'];
+        }
+        $triplet_types = ['CONCISE', 'RAW'];
+        foreach ($triplet_types as $type) {
+            if (!empty($triplets['subject'][$type])&&
+                !empty($triplets['predicate'][$type])) {
+                $generated_questions[$type][] =
+                    trim($triplets['subject'][$type]) .
+                    " " . trim($triplets['predicate'][$type]) .
+                    " " . $question_marker;
+                $generated_questions[$type][] = $question_marker.
+                    " " . trim($triplets['predicate'][$type]) .
+                    " " . trim($triplets['subject'][$type]);
+            }
+        }
+        return $generated_questions;
+    }
+}
diff --git a/src/library/TripletExtractor.php b/src/library/TripletExtractor.php
deleted file mode 100644
index 77ff6a1d6..000000000
--- a/src/library/TripletExtractor.php
+++ /dev/null
@@ -1,1149 +0,0 @@
-<?php
-/**
- * SeekQuarry/Yioop --
- * Open Source Pure PHP Search Engine, Crawler, and Indexer
- *
- * Copyright (C) 2009 - 2015  Chris Pollett chris@pollett.org
- *
- * LICENSE:
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @author Chris Pollett chris@pollett.org
- * @license http://www.gnu.org/licenses/ GPL3
- * @link http://www.seekquarry.com/
- * @copyright 2009 - 2016
- * @filesource
- */
-namespace seekquarry\yioop\library;
-
-use seekquarry\yioop\configs as C;
-use seekquarry\yioop\library as L;
-
-/**
- *
- * @author Nirav Patel
- * @package seekquarry\yioop\library
- */
-class TripletExtractor
-{
-
-    /**
-     * Any unique identifier of question word
-     * @question_word string identifier
-     */
-    public static $question_word = "qqque";
-
-    /**
-     * Takes a phrase and tags each term in it with its part of speech.
-     * So each term in the original phrase gets mapped to term~part_of_speech
-     * This tagger is based on a Brill tagger. It uses a lexicon
-     * consisting of words from the Brown corpus together with a list of
-     * part of speech tags that that word had in the Brown Corpus. These are
-     * used to get an initial part of speech (if word was not present than
-     * we assume it is a noun). From this a fixed set of rules is used to modify
-     * the initial tag if necessary.
-     *
-     * @param string $phrase text to add parts speech tags to
-     * @return string $tagged_phrase phrase where each term has ~part_of_speech
-     *     appended
-     */
-    public static function tagPartsOfSpeechPhrase($phrase)
-    {
-        preg_match_all("/[\w\d]+/", $phrase, $matches);
-        $tagged_tokens = self::tagTokenizePartOfSpeech($phrase);
-        $tagged_phrase = self::taggedPartOfSpeechTokensToString(
-            $tagged_tokens);
-        return $tagged_phrase;
-    }
-
-    /**
-     * Split input text into terms and output an array with one element
-     * per term, that element consisting of array with the term token
-     * and the part of speech tag.
-     *
-     * @param string $text string to tag and tokenize
-     * @return array of pairs of the form( "token" => token_for_term,
-     *     "tag"=> part_of_speech_tag_for_term) for one each token in $text
-     */
-    public static function tagTokenizePartOfSpeech($text)
-    {
-        static $lex_string = null;
-        if (!$lex_string) {
-            $lex_string = gzdecode(file_get_contents("lexicon.txt.gz"));
-        }
-        preg_match_all("/[\w\d]+/", $text, $matches);
-        $tokens = $matches[0];
-        $nouns = ['NN', 'NNS', 'NNP'];
-        $verbs = ['VBD', 'VBP', 'VB'];
-        $result = [];
-        $previous = ['token' => -1, 'tag' => -1];
-        $previous_token = -1;
-        sort($tokens);
-        $dictionary = [];
-        /*
-            Notice we sorted the tokens, and notice how we use $cur_pos
-            so only advance forward through $lex_string. So the
-            run time of this is bound by at most one scan of $lex_string
-         */
-        $cur_pos = 0;
-        foreach ($tokens as $token) {
-            $token = strtolower(rtrim($token, "."));
-            $token_pos = stripos($lex_string, "\n" . $token . " ", $cur_pos);
-            if ($token_pos !== false) {
-                $token_pos++;
-                $cur_pos = stripos($lex_string, "\n", $token_pos);
-                $line = trim(substr($lex_string, $token_pos,
-                    $cur_pos - $token_pos));
-                $tag_list = explode(' ', $line);
-                $dictionary[$token] = array_slice($tag_list, 1);
-                $cur_pos++;
-            }
-        }
-        // now using our dictionary we tag
-        $i = 0;
-        $tag_list = [];
-        $prev_tag_list = [];
-        foreach ($matches[0] as $token) {
-            // default to a common noun
-            $current = ['token' => $token, 'tag' => 'NN'];
-            // remove trailing full stops
-            $token = strtolower(rtrim($token, "."));
-            if (isset($dictionary[$token])) {
-                $tag_list = $dictionary[$token];
-                $current['tag'] = $tag_list[0];
-            }
-            // Converts verbs after 'the' to nouns
-            if ($previous['tag'] == 'DT' && in_array($current['tag'], $verbs)) {
-                $current['tag'] = 'NN';
-            }
-            // Convert noun to number if . appears
-            if ($current['tag'][0] == 'N' && strpos($token, '.') !== false) {
-                $current['tag'] = 'CD';
-            }
-            $ends_with = substr($token, -2);
-            switch ($ends_with) {
-                case 'ed':
-                    // Convert noun to past particle if ends with 'ed'
-                    if ($current['tag'][0] == 'N') {
-                        $current['tag'] = 'VBN';
-                    }
-                    break;
-                case 'ly':
-                    // Anything that ends 'ly' is an adverb
-                    $current['tag'] = 'RB';
-                    break;
-                case 'al':
-                    // Common noun to adjective if it ends with al
-                    if (in_array($current['tag'], $nouns)) {
-                        $current['tag'] = 'JJ';
-                    }
-                    break;
-            }
-            // Noun to verb if the word before is 'would'
-            if ($current['tag'] == 'NN' && $previous_token == 'would') {
-                $current['tag'] = 'VB';
-            }
-            // Convert common noun to gerund
-            if (in_array($current['tag'], $nouns) &&
-                substr($token, -3) == 'ing'
-            ) {
-                $current['tag'] = 'VBG';
-            }
-            //nouns followed by adjectives
-            if (in_array($previous['tag'], $nouns) &&
-                $current['tag'] == 'JJ' && in_array('JJ', $prev_tag_list)
-            ) {
-                $result[$i - 1]['tag'] = 'JJ';
-                $current['tag'] = 'NN';
-            }
-            /* If we get noun noun, and the second can be a verb,
-             * convert to verb; if noun noun and previous could be an
-             * adjective convert to adjective
-             */
-            if (in_array($previous['tag'], $nouns) &&
-                in_array($current['tag'], $nouns)
-            ) {
-                if (in_array('VBN', $tag_list)) {
-                    $current['tag'] = 'VBN';
-                } else {
-                    if (in_array('VBZ', $tag_list)) {
-                        $current['tag'] = 'VBZ';
-                    } else {
-                        if (in_array('JJ', $prev_tag_list)) {
-                            $result[$i - 1]['tag'] = 'JJ';
-                        }
-                    }
-                }
-            }
-            $result[$i] = $current;
-            $i++;
-            $previous = $current;
-            $previous_token = $token;
-            $prev_tag_list = $tag_list;
-            $tag_list = [];
-        }
-        return $result;
-    }
-
-    /**
-     * Takes an array of pairs (token, tag) that came from phrase
-     * and builds a new phrase where terms look like token~tag.
-     *
-     * @param array $tagged_tokens array of pairs as might come from tagTokenize
-     * @return string $tagged_phrase a phrase with terms in the format token~tag
-     */
-    public static function taggedPartOfSpeechTokensToString($tagged_tokens)
-    {
-        $tagged_phrase = "";
-        $simplified_parts_of_speech = [
-            "NN" => "NN",
-            "NNS" => "NN",
-            "NNP" => "NN",
-            "NNPS" => "NN",
-            "PRP" => "NN",
-            'PRP$' => "NN",
-            "WP" => "NN",
-            "VB" => "VB",
-            "VBD" => "VB",
-            "VBN" => "VB",
-            "VBP" => "VB",
-            "VBZ" => "VB",
-            "JJ" => "AJ",
-            "JJR" => "AJ",
-            "JJS" => "AJ",
-            "RB" => "AV",
-            "RBR" => "AV",
-            "RBS" => "AV",
-            "WRB" => "AV"
-        ];
-        foreach ($tagged_tokens as $t) {
-            $tag = trim($t['tag']);
-            $tag = (isset($simplified_parts_of_speech[$tag])) ?
-                $simplified_parts_of_speech[$tag] : $tag;
-            $tagged_phrase .= $t['token'] . "~" . $tag . " ";
-        }
-        return $tagged_phrase;
-    }
-    /**
-     * Takes a statement and return the array of words from text
-     * along with the tags of Part Of Speech
-     *
-     * @param $text any statement
-     * @return array words tagged with POS tags
-     */
-    public static function partOfSpeechTaggerBrill($text)
-    {
-        static $dict = null;
-        $lexicon = C\LOCALE_DIR . "/en_US/resources/lexicon.txt";
-        if (!$dict) {
-            $fh = fopen($lexicon, 'r');
-            while ($line = fgets($fh)) {
-                $tags = explode(' ', $line);
-                $dict[strtolower(array_shift($tags))] = $tags;
-            }
-            fclose($fh);
-        }
-        preg_match_all("/[\w\d\.]+/", $text, $matches);
-        $nouns = ['NN', 'NNS'];
-        $return = [];
-        $i = 0;
-        foreach ($matches[0] as $token) {
-            // default to a common noun
-            $return[$i] = ['token' => $token, 'tag' => 'NN'];
-            // remove trailing full stops
-            if (substr($token, -1) == '.') {
-                $token = preg_replace('/\.+$/', '', $token);
-            }
-            // get from dict if set
-            if (isset($dict[strtolower($token)])) {
-                $return[$i]['tag'] = trim($dict[strtolower($token)][0]);
-            }
-            // Converts verbs after 'the' to nouns
-            if ($i > 0) {
-                if ($return[$i - 1]['tag'] == 'DT' &&
-                    in_array($return[$i]['tag'],
-                        ['VBD', 'VBP', 'VB'])
-                ) {
-                    $return[$i]['tag'] = 'NN';
-                }
-            }
-            // Convert noun to number if . appears
-            if ($return[$i]['tag'][0] == 'N' && strpos($token, '.') !== false) {
-                $return[$i]['tag'] = 'CD';
-            }
-            // Convert noun to past particile if ends with 'ed'
-            if ($return[$i]['tag'][0] == 'N' && substr($token, -2) == 'ed') {
-                $return[$i]['tag'] = 'VBN';
-            }
-            // Anything that ends 'ly' is an adverb
-            if (substr($token, -2) == 'ly') {
-                $return[$i]['tag'] = 'RB';
-            }
-            // Common noun to adjective if it ends with al
-            if (in_array($return[$i]['tag'], $nouns)
-                && substr($token, -2) == 'al'
-            ) {
-                $return[$i]['tag'] = 'JJ';
-            }
-            // Noun to verb if the word before is 'would'
-            if ($i > 0) {
-                if ($return[$i]['tag'] == 'NN'
-                    && strtolower($return[$i - 1]['token']) == 'would'
-                ) {
-                    $return[$i]['tag'] = 'VB';
-                }
-            }
-           // Convert noun to plural if it ends with an s
-            if ($return[$i]['tag'] == 'NN' && substr($token, -1) == 's') {
-                $return[$i]['tag'] = 'NNS';
-            }
-            // Convert common noun to gerund
-            if (in_array($return[$i]['tag'], $nouns)
-                && substr($token, -3) == 'ing'
-            ) {
-                $return[$i]['tag'] = 'VBG';
-            }
-            // If we get noun, and the second can be a verb, convert to verb
-            if ($i > 0) {
-                if (in_array($return[$i]['tag'], $nouns)
-                    && in_array($return[$i - 1]['tag'], $nouns)
-                    && isset($dict[strtolower($token)])
-                ) {
-                    if (in_array('VBN', $dict[strtolower($token)])) {
-                        $return[$i]['tag'] = 'VBN';
-                    } else {
-                        if (in_array('VBZ',
-                            $dict[strtolower($token)])) {
-                            $return[$i]['tag'] = 'VBZ';
-                        }
-                    }
-                }
-            }
-            $i++;
-        }
-        return $return;
-    }
-
-    /**
-     * Takes tagged array from the Part Of Speech tagger and
-     * returns tree generated from the tagged statement
-     *
-     * @param $tagger_array tagged array from part of speech tagger
-     * @return array formed tree array
-     */
-    public static function generateParseTreeUsingRDP($tagger_array)
-    {
-        $tree = [];
-        $tree = ["cur_node" => 0];
-        $tree_np = TripletExtractor::extractNPUsingRDP($tagger_array, $tree);
-        $tree = ["cur_node" => $tree_np['cur_node']];
-        $tree_vp = TripletExtractor::extractVPUsingRDP($tagger_array, $tree);
-        if ($tree == $tree_vp) {
-            return $tree;
-        }
-        $tree['cur_node'] = $tree_vp['cur_node'];
-        unset($tree_np['cur_node']);
-        unset($tree_vp['cur_node']);
-        $tree['NP'] = $tree_np['NP'];
-        $tree['VP'] = $tree_vp['VP'];
-        return $tree;
-    }
-
-    /**
-     * Takes tree generated till Statement and returns
-     * tree by adding Noun Phrase subtree to it
-     *
-     * @param $tagger_array tagged array
-     * @param $tree current tree
-     * @return mixed tree with NP node
-     */
-    public static function extractNPUsingRDP($tagger_array, $tree)
-    {
-        $NP = $tree['cur_node'];
-        $tree_dt = ['cur_node' => $NP];
-        $tree_dt = TripletExtractor::extractDTUsingRDP($tagger_array, $tree_dt);
-        $tree_jj = ['cur_node' => $tree_dt['cur_node']];
-        $tree_jj = TripletExtractor::extractJJUsingRDP($tagger_array, $tree_jj);
-        $tree_nn = ['cur_node' => $tree_jj['cur_node']];
-        $tree_nn = TripletExtractor::extractNNUsingRDP($tagger_array, $tree_nn);
-        if ($NP == $tree_nn['cur_node']) {
-            $tree['NP'] = "";
-        } else {
-            $cur_node = $tree_nn['cur_node'];
-            unset($tree_dt['cur_node']);
-            $tree_new_sub['DT'] = $tree_dt;
-            unset($tree_jj['cur_node']);
-            $tree_new_sub['JJ'] = $tree_jj;
-            unset($tree_nn['cur_node']);
-            $tree_new_sub['NN'] = $tree_nn;
-            $tree_new['cur_node'] = $cur_node;
-            $tree_new['NP'] = $tree_new_sub;
-            return $tree_new;
-        }
-        return $tree;
-    }
-
-    /**
-     * Takes current tree and returns
-     * tree by adding determiner node to it
-     *
-     * @param $tagger_array pos tagged array
-     * @param $tree current tree
-     * @return mixed DT added tree
-     */
-    public static function extractDTUsingRDP($tagger_array, $tree)
-    {
-        if (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("DT" == $tagger_array[$tree['cur_node']]['tag'])
-        ) {
-           $tree['DT'] = $tagger_array[$tree['cur_node']]['token'];
-           $tree['cur_node'] = $tree['cur_node'] + 1;
-           return $tree;
-       }
-       return $tree;
-   }
-   /**
-     * Takes current tree and returns
-     * tree by adding adjective node to it
-     *
-    * @param $tagger_array POS tagged array
-    * @param $tree current tree
-    * @return mixed JJ added tree
-    */
-   public static function extractJJUsingRDP($tagger_array, $tree)
-   {
-       $adjective_string = "";
-       while (isset($tagger_array[$tree['cur_node']]['tag']) &&
-           ("JJ" == $tagger_array[$tree['cur_node']]['tag'] ||
-                "JJR" == $tagger_array[$tree['cur_node']]['tag'] ||
-                "JJS" == $tagger_array[$tree['cur_node']]['tag'])) {
-           $adjective_string .= " " .
-               $tagger_array[$tree['cur_node']]['token'];
-           $tree['cur_node'] = $tree['cur_node'] + 1;
-       }
-       if ("" != $adjective_string) {
-           $tag = "JJ";
-           $tree[$tag] = $adjective_string;
-       }
-        return $tree;
-   }
-   /**
-     * Takes current tree and returns
-     * tree by adding Noun node to it
-     *
-    * @param $tagger_array POS tagged array
-    * @param $tree current generated tree
-    * @return mixed NN added tree
-     */
-    public static function extractNNUsingRDP($tagger_array, $tree)
-    {
-        //Combining multiple noun into one
-        $noun_string = "";
-        while (isset($tagger_array[$tree['cur_node']]['tag']) && (
-                "NN" == $tagger_array[$tree['cur_node']]['tag'] ||
-                "NNS" == $tagger_array[$tree['cur_node']]['tag'] ||
-                "NNP" == $tagger_array[$tree['cur_node']]['tag'] ||
-                "NNPS" == $tagger_array[$tree['cur_node']]['tag'] ||
-                "PRP" == $tagger_array[$tree['cur_node']]['tag'])) {
-            $noun_string .= " " . $tagger_array[$tree['cur_node']]['token'];
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        if ("" != $noun_string) {
-            $tag = "NN";
-            $tree[$tag] = $noun_string;
-        }
-        // Checking for preposition
-        if (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("IN" == $tagger_array[$tree['cur_node']]['tag'])) {
-            $tag = $tagger_array[$tree['cur_node']]['tag'];
-            $preposition_string = $tagger_array[$tree['cur_node']]['token'];
-            $tree[$tag] = $preposition_string;
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        if (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("DT" == $tagger_array[$tree['cur_node']]['tag'])) {
-            $tree['DT_1'] = $tagger_array[$tree['cur_node']]['token'];
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        $adjective_string = "";
-        while (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("JJ" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "JJR" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "JJS" == $tagger_array[$tree['cur_node']]['tag'])) {
-            $adjective_string .= " " .
-                $tagger_array[$tree['cur_node']]['token'];
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        if ("" != $adjective_string) {
-            $tag = "JJ_1";
-            $tree[$tag] = $adjective_string;
-        }
-        $propernoun_string = "";
-        while (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("NN" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "NNS" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "NNP" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "NNPS" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "PRP" == $tagger_array[$tree['cur_node']]['tag'])) {
-            $propernoun_string .= " " .
-                $tagger_array[$tree['cur_node']]['token'];
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        if ("" != $propernoun_string) {
-            $tag = "NNP";
-            $tree[$tag] = $propernoun_string;
-        }
-        return $tree;
-    }
-
-    /**
-     * Takes current tree and returns
-     * tree by adding auxiliary verb
-     * node to it
-     *
-     * @param $tagger_array POS tagged array
-     * @param $tree current tree
-     * @return mixed VP added tree
-     */
-    public static function extractVPUsingRDP($tagger_array, $tree)
-    {
-        $VP = $tree['cur_node'];
-        $tree_vp = ['cur_node' => $VP];
-        $tree_vb = ['cur_node' => $tree_vp['cur_node']];
-        $tree_vb = TripletExtractor::extractVBUsingRDP($tagger_array, $tree_vb);
-        if ($VP == $tree_vb['cur_node']) {
-            return $tree;
-        }
-        $tree_np = ['cur_node' => $tree_vb['cur_node']];
-        $tree_np = TripletExtractor::extractNPUsingRDP($tagger_array, $tree_np);
-        if ($VP == $tree_np['cur_node']) {
-        } else {
-            $cur_node = $tree_np['cur_node'];
-            unset($tree_vb['cur_node']);
-            unset($tree_np['cur_node']);
-            $tree_new_sub['VB'] = $tree_vb;
-            $tree_new_sub['NP'] = $tree_np['NP'];
-            $tree_new['cur_node'] = $cur_node;
-            $tree_new['VP'] = $tree_new_sub;
-            return $tree_new;
-        }
-        return $tree;
-    }
-
-    /**
-     * Takes current tree and returns
-     * tree by adding Verb node to it.
-     *
-     * @param $tagger_array POS tagged tree
-     * @param $tree current tree
-     * @return mixed VB added tree
-     */
-    public static function extractVBUsingRDP($tagger_array, $tree)
-    {
-        while (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("VB" != $tagger_array[$tree['cur_node']]['tag'] &&
-            "VBD" != $tagger_array[$tree['cur_node']]['tag'] &&
-            "VBG" != $tagger_array[$tree['cur_node']]['tag'] &&
-            "VBN" != $tagger_array[$tree['cur_node']]['tag'] &&
-            "VBP" != $tagger_array[$tree['cur_node']]['tag'] &&
-            "VBZ" != $tagger_array[$tree['cur_node']]['tag'])) {
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        $verb_string = "";
-        while (isset($tagger_array[$tree['cur_node']]['tag']) &&
-            ("VB" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "VBD" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "VBG" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "VBN" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "VBP" == $tagger_array[$tree['cur_node']]['tag'] ||
-            "VBZ" == $tagger_array[$tree['cur_node']]['tag'])) {
-            $verb_string .= " " . $tagger_array[$tree['cur_node']]['token'];
-            $tree['cur_node'] = $tree['cur_node'] + 1;
-        }
-        if ("" != $verb_string) {
-            $tag = "VB";
-            $tree[$tag] = $verb_string;
-        }
-        return $tree;
-   }
-   /**
-     * Takes current tree and returns
-     * a triplet extracted from the tree.
-     *
-    * @param $tree fully generated tree
-    * @return array triplet array
-    */
-   public static function extractTriplet($tree)
-   {
-       $triplet = [];
-       $triplet['subject'] = TripletExtractor::extractSubjectFromTree($tree);
-       $triplet['predicate'] =
-           TripletExtractor::extractPredicateFromTree($tree);
-       $triplet['object'] = TripletExtractor::extractObjectFromTree($tree);
-       return $triplet;
-    }
-
-    /**
-     * Takes triplet tree  and returns
-     * the processed triplet from the
-     * tree.
-     *
-     * @param $triplet_tree any statement
-     * @return array processed triplet
-     */
-    public static function processTripletForStorage($triplet_tree)
-    {
-        $processed_triplet = [];
-        $processed_triplet['RAW'] =
-            TripletExtractor::getRawTripletForStorage($triplet_tree);
-        $processed_triplet['FEATURED'] =
-            TripletExtractor::getFeaturedTripletForStorage($triplet_tree);
-        return $processed_triplet;
-    }
-
-    /**
-     * Takes triplet tree and returns
-     * tree an array of raw
-     * triplets.
-     *
-     * @param $triplet_tree triplet array
-     * @return array raw triplet array
-     */
-    public static function getRawTripletForStorage($triplet_tree)
-    {
-        $raw_triplet = [];
-        $question_answer_triplet = [];
-        if (isset($triplet_tree['subject']['RAW'])
-            && isset($triplet_tree['predicate']['RAW'])
-            && isset($triplet_tree['object']['RAW'])
-            && !TripletExtractor::isNullOrEmptyString(
-                                    $triplet_tree['subject']['RAW'])
-            && !TripletExtractor::isNullOrEmptyString(
-                                    $triplet_tree['predicate']['RAW'])
-            && !TripletExtractor::isNullOrEmptyString(
-                                    $triplet_tree['object']['RAW'])
-        ) {
-
-            $SUBJECT = trim($triplet_tree['subject']['RAW']);
-            $PREDICATE = trim($triplet_tree['predicate']['RAW']);
-            $OBJECT = trim($triplet_tree['object']['RAW']);
-
-            $raw_triplet['SUBJECT'] =
-                TripletExtractor::$question_word . " " .
-                                    $PREDICATE . " " . $OBJECT;
-            $raw_triplet['PREDICATE'] =
-                $SUBJECT . " " . TripletExtractor::$question_word . " " .
-                                    $OBJECT;
-            $raw_triplet['OBJECT'] =
-                $SUBJECT . " " . $PREDICATE . " " .
-                                    TripletExtractor::$question_word;
-
-            $question_answer_triplet[TripletExtractor::$question_word . " " .
-                            $PREDICATE . " " . $OBJECT] = $SUBJECT;
-            $question_answer_triplet[$SUBJECT . " " .
-                TripletExtractor::$question_word . " " . $OBJECT] = $PREDICATE;
-            $question_answer_triplet[$SUBJECT . " " . $PREDICATE . " " .
-                TripletExtractor::$question_word] = $OBJECT;
-            $raw_triplet['QUESTION_ANSWER_LIST'] = $question_answer_triplet;
-        }
-        return $raw_triplet;
-    }
-
-    /**
-     * Takes triplet tree and returns
-     * tree an array of featured
-     * triplets.
-     *
-     * @param $triplet_tree triplet array
-     * @return array featured triplet array
-     */
-    public static function getFeaturedTripletForStorage($triplet_tree)
-    {
-        $featured_triplet = [];
-        $question_answer_triplet = [];
-        if (isset($triplet_tree['subject']['FEATURED'])
-            && isset($triplet_tree['predicate']['FEATURED'])
-            && isset($triplet_tree['object']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                                    $triplet_tree['subject']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                                    $triplet_tree['predicate']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                                    $triplet_tree['object']['FEATURED'])
-        ) {
-            $SUBJECT = trim($triplet_tree['subject']['FEATURED']);
-            $PREDICATE = trim($triplet_tree['predicate']['FEATURED']);
-            $OBJECT = trim($triplet_tree['object']['FEATURED']);
-
-            $featured_triplet['SUBJECT'] =
-                TripletExtractor::$question_word . " " . $PREDICATE .
-                                    " " . $OBJECT;
-            $featured_triplet['PREDICATE'] =
-                $SUBJECT . " " . TripletExtractor::$question_word .
-                                    " " . $OBJECT;
-            $featured_triplet['OBJECT'] =
-                $SUBJECT . " " . $PREDICATE . " " .
-                                    TripletExtractor::$question_word;
-
-            $question_answer_triplet[TripletExtractor::$question_word . " " .
-                                    $PREDICATE . " " . $OBJECT] = $SUBJECT;
-            $question_answer_triplet[$SUBJECT . " " .
-                                    TripletExtractor::$question_word .
-                                                " " . $OBJECT] = $PREDICATE;
-            $question_answer_triplet[$SUBJECT . " " . $PREDICATE . " " .
-                                    TripletExtractor::$question_word] = $OBJECT;
-
-            $featured_triplet['QUESTION_ANSWER_LIST'] = $question_answer_triplet;
-        }
-        return $featured_triplet;
-    }
-
-    /**
-     * Takes a string and checks if
-     * it is set or empty.
-     *
-     * @param $string any string
-     * @return bool true if null of empty string
-     */
-    public static function isNullOrEmptyString($string)
-    {
-        return (!isset($string) || trim($string) === '');
-    }
-
-    /**
-     * Takes current tree and returns
-     * the array of text tagged as
-     * Subject.
-     *
-     * @param $tree generated tree
-     * @return array subject array
-     */
-    public static function extractSubjectFromTree($tree)
-    {
-        $subject = [];
-        if (isset($tree['NP']) && $tree['NP'] != null) {
-            $tree_np = $tree['NP'];
-            $value = TripletExtractor::extractFirstNounFromNPTree($tree_np);
-            $subject['RAW'] = $value;
-            $featured_subject = "";
-            $it = new \RecursiveIteratorIterator(
-                                new \RecursiveArrayIterator($tree_np));
-            foreach ($it as $v) {
-                $featured_subject .= $v . " ";
-            }
-            $subject['FEATURED'] = $featured_subject;
-        } else {
-            $subject['RAW'] = "";
-            $subject['FEATURED'] = "";
-        }
-        return $subject;
-    }
-
-    /**
-     * Takes current tree and returns
-     * the array of text tagged as
-     * Predicate.
-     *
-     * @param $tree generated tree
-     * @return array predicate array
-     */
-    public static function extractPredicateFromTree($tree)
-    {
-        $predicate = [];
-        if (isset($tree['VP']) && $tree['VP'] != null) {
-            $tree_vp = $tree['VP'];
-            $value = TripletExtractor::extractDeepestVerbFromVBTree($tree_vp);
-            $predicate['RAW'] = $value;
-            $featured_predicate = "";
-            if (isset($tree_vp['VB']) && $tree_vp['VB'] != null) {
-                $tree_vb = $tree_vp['VB'];
-                $it = new \RecursiveIteratorIterator(
-                                    new \RecursiveArrayIterator($tree_vb));
-                foreach ($it as $v) {
-                    $featured_predicate .= $v . " ";
-                }
-                $predicate['FEATURED'] = $featured_predicate;
-            }
-        } else {
-            $predicate['RAW'] = "";
-            $predicate['FEATURED'] = "";
-        }
-        return $predicate;
-    }
-
-    /**
-     * Takes current tree and returns
-     * the array of text tagged as
-     * Object.
-     *
-     * @param $tree generated tree
-     * @return array object array
-     */
-    public static function extractObjectFromTree($tree)
-    {
-        $object = [];
-        if (isset($tree['VP']) && $tree['VP'] != null) {
-            $tree_vp = $tree['VP'];
-            if (isset($tree_vp['NP']) && $tree_vp['NP'] != null) {
-                $nb = $tree_vp['NP'];
-                $value = TripletExtractor::extractFirstNounFromNPTree($nb);
-                $object['RAW'] = $value;
-                $featured_object = "";
-                $it = new \RecursiveIteratorIterator(
-                                    new \RecursiveArrayIterator($nb));
-                foreach ($it as $v) {
-                    $featured_object .= $v . " ";
-                }
-                $object['FEATURED'] = $featured_object;
-            } else {
-                $object['RAW'] = "";
-                $object['FEATURED'] = "";
-            }
-        } else {
-            $object['RAW'] = "";
-            $object['FEATURED'] = "";
-        }
-        return $object;
-    }
-
-    /**
-     * Takes noun phrase tree and return
-     * the first noun from the tree.
-     *
-     * @param $tree_np noun phrase subtree
-     * @return string first noun
-     */
-    public static function extractFirstNounFromNPTree($tree_np)
-    {
-        if (isset($tree_np['NN']) && $tree_np['NN'] != null) {
-            $nn = $tree_np['NN'];
-            if (isset($nn['NN']) && $nn['NN'] != null) {
-                $nn = $nn['NN'];
-                return $nn;
-            }
-        }
-        return "";
-    }
-
-    /**
-     * Takes verb phrase tree and returns
-     * the base form of the verb.
-     *
-     * @param $tree_vp verb phrase subtree
-     * @return string deepest verb
-     */
-    public static function extractDeepestVerbFromVBTree($tree_vp)
-    {
-        if (isset($tree_vp['VB']) && $tree_vp['VB'] != null) {
-            $vb = $tree_vp['VB'];
-            if ($vb['VB'] != null) {
-                $vb = $vb['VB'];
-                return $vb;
-            }
-        }
-        return "";
-    }
-
-    /**
-     * Takes current tree and return
-     * attribute maps for noun, adjectives,
-     * preposition.
-     *
-     * @param $tree generated tree
-     * @return array attributes array
-     */
-    public static function extractAttributes($tree)
-    {
-        $attribute_map = [];
-        if (isset($tree['JJ']) && count($tree['JJ']) > 0) {
-            $attribute_map['JJ'] = $tree['JJ']['JJ'];
-        }
-
-        if (isset($tree['NN']) && count($tree['NN']) > 0) {
-
-            $nn_tree = $tree['NN'];
-
-            if (isset($nn_tree['IN']) && count($nn_tree['IN']) > 0) {
-                $attribute_map['IN'] = $nn_tree['IN'];
-            }
-
-            if (isset($nn_tree['JJ_1']) && count($nn_tree['JJ_1']) > 0) {
-                $attribute_map['JJ_1'] = $nn_tree['JJ_1'];
-            }
-
-            if (isset($nn_tree['NNP']) && count($nn_tree['NNP']) > 0) {
-                $attribute_map['NNP'] = $nn_tree['NNP'];
-            }
-        }
-        return $attribute_map;
-    }
-
-    /**
-     * Takes the statement and apply
-     * the rules in the defined in the
-     * lexicon, assign parts of speech
-     * and generate a triplet tree.
-     *
-     * @param $statement any statement
-     * @return array processed triplet
-     */
-    public static function storeStatementAsTriplet($statement)
-    {
-        try {
-            $tagged_statement =
-                TripletExtractor::partOfSpeechTaggerBrill($statement);
-            $statement_tree =
-                TripletExtractor::generateParseTreeUsingRDP($tagged_statement);
-            $triplet_tree = TripletExtractor::extractTriplet($statement_tree);
-            return TripletExtractor::processTripletForStorage($triplet_tree);
-        } catch (\Exception $e) {
-
-        }
-    }
-
-    /**
-     * Process individual statements
-     * from the statement array. Generate
-     * a list of question and answer
-     * pairs.
-     *
-     * @param $statement_array array of statements
-     * @return array list of triplets
-     */
-    public static function storeStatementArraysAsTriplet($statement_array)
-    {
-        $triplets_list = [];
-        $question_list = [];
-        $question_answer_list = array();
-        foreach ($statement_array as $key => $value) {
-            try {
-                if (str_word_count($key) >= 3) {
-                    $extracted_triplet =
-                            TripletExtractor::storeStatementAsTriplet($key);
-
-                    if (isset($extracted_triplet['RAW']) &&
-                        sizeof($extracted_triplet['RAW']) > 0) {
-                        $question_list[$extracted_triplet['RAW']['SUBJECT']]
-                                            = $value;
-                        $question_list[$extracted_triplet['RAW']['PREDICATE']]
-                                            = $value;
-                        $question_list[$extracted_triplet['RAW']['OBJECT']]
-                                            = $value;
-                        $question_answer_list =
-                            array_merge($question_answer_list,
-                            $extracted_triplet['RAW']['QUESTION_ANSWER_LIST']);
-                    }
-
-                    if (isset($extracted_triplet['FEATURED']) &&
-                        sizeof($extracted_triplet['FEATURED']) > 0) {
-                        $question_list[$extracted_triplet['FEATURED']['SUBJECT']]
-                                            = $value;
-                        $question_list[$extracted_triplet['FEATURED']['PREDICATE']]
-                                            = $value;
-                        $question_list[$extracted_triplet['FEATURED']['OBJECT']]
-                                            = $value;
-                        $question_answer_list =
-                            array_merge($question_answer_list,
-                            $extracted_triplet['FEATURED']['QUESTION_ANSWER_LIST']);
-                    }
-                }
-            } catch (\Exception $e) {
-                echo 'Caught exception: ', $e->getMessage(), "\n";
-                continue;
-            }
-        }
-        $triplets_list['QUESTION_LIST'] = $question_list;
-        $triplets_list['QUESTION_ANSWER_LIST'] = $question_answer_list;
-        return $triplets_list;
-    }
-
-    /**
-     * Takes any question started with WH question and returns the
-     * triplet from the question
-     *
-     * @param $question_string question string
-     * @return array question triplet
-     */
-    public static function questionParser($question_string)
-    {
-        $question_string_tagged = TripletExtractor::partOfSpeechTaggerBrill(
-            $question_string);
-        $index = 0;
-        $generated_question_array = [];
-        if (isset($question_string_tagged[$index])) {
-            $tag = trim($question_string_tagged[$index]['tag']);
-            if ("WRB" ==  $tag || "WP" == $tag) {
-                $token = strtoupper(
-                    trim($question_string_tagged[$index]['token']));
-                if ("WHO" == $token) {
-                    $index = $index + 1;
-                    $generated_question_array =
-                        TripletExtractor::parseWHOQuestion(
-                            $question_string_tagged, $index);
-                } else {
-                    if ("WHERE" == $token ||
-                        "WHEN" == $token ||
-                        "WHAT" == $token) {
-                        $index = $index + 1;
-                        $generated_question_array =
-                        TripletExtractor::parseWHPlusQuestion_New(
-                            $question_string_tagged,
-                        $index);
-                    }
-                }
-            }
-        }
-        return $generated_question_array;
-    }
-
-    /**
-     * Takes tagged question string starts with Who
-     * and returns question triplet from the question string
-     *
-     * @param $question_string_tagged tagged question statement
-     * @param $index current index in statement
-     * @return array parsed triplet
-     */
-    public static function parseWHOQuestion($question_string_tagged, $index)
-    {
-        $generated_question_array = [];
-        $tree = ["cur_node" => $index];
-        $tree['NP'] = "WHO";
-        $triplet = [];
-        $tree_vp = TripletExtractor::extractVPUsingRDP(
-            $question_string_tagged, $tree);
-        $triplet['predicate'] = TripletExtractor::extractPredicateFromTree(
-            $tree_vp);
-        $triplet['object'] = TripletExtractor::extractObjectFromTree(
-            $tree_vp);
-        if (isset($triplet['object']['RAW'])
-            && isset($triplet['predicate']['RAW'])
-            && !TripletExtractor::sNullOrEmptyString(
-                $triplet['object']['RAW'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['predicate']['RAW'])
-        ) {
-            $generated_question_array['RAW']['1'] =
-                trim($triplet['object']['RAW']) .
-                " " . trim($triplet['predicate']['RAW']) .
-                " " . trim(TripletExtractor::$question_word);
-            $generated_question_array['RAW']['2'] =
-                trim(TripletExtractor::$question_word) .
-                " " . trim($triplet['predicate']['RAW']) .
-                " " . trim($triplet['object']['RAW']);
-        }
-        if (isset($triplet['object']['FEATURED'])
-            && isset($triplet['predicate']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['object']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['predicate']['FEATURED'])
-        ) {
-            $generated_question_array['FEATURED']['1'] =
-                trim($triplet['object']['FEATURED']) .
-                " " . trim($triplet['predicate']['FEATURED']) .
-                " " . trim(TripletExtractor::$question_word);
-            $generated_question_array['FEATURED']['2'] =
-                trim($triplet['object']['FEATURED']) .
-                " " . trim($triplet['predicate']['FEATURED']) .
-                " " . trim(TripletExtractor::$question_word);
-        }
-        return $generated_question_array;
-    }
-
-    /**
-     * Takes tagged question string starts with Wh+ except Who
-     * and returns question triplet from the question string
-     *
-     * @param $question_string_tagged tagged question statement
-     * @param $index current index in statement
-     * @return array parsed triplet
-     */
-    public static function parseWHPlusQuestion($question_string_tagged, $index)
-    {
-        $generated_question_array = [];
-        $aux_verb = "";
-        while (isset($question_string_tagged[$index])) {
-            $tag = trim($question_string_tagged[$index]['tag']);
-            if ("VB" ==  $tag ||
-                "VBD" == $tag ||
-                "VBG" == $tag ||
-                "VBN" == $tag ||
-                "VBP" == $tag ||
-                "VBZ" == $tag) {
-                $token = trim($question_string_tagged[$index]['token']);
-                $aux_verb .= " " . $token;
-                $index = $index + 1;
-            }
-        }
-        $tree = ["cur_node" => $index];
-        $tree['NP'] = "WHPlus";
-        $triplet = [];
-        $tree_np = TripletExtractor::extractNPUsingRDP(
-            $question_string_tagged, $tree);
-        $triplet['subject'] = TripletExtractor::extractSubjectFromTree(
-            $tree_np);
-        $tree_vp = TripletExtractor::extractVPUsingRDP(
-            $question_string_tagged, $tree);
-        $triplet['predicate'] = TripletExtractor::extractPredicateFromTree(
-            $tree_vp);
-        $triplet['object'] = TripletExtractor::extractObjectFromTree(
-            $tree_vp);
-        if (isset($aux_verb)
-            && !TripletExtractor::isNullOrEmptyString($aux_verb)
-        ) {
-            $triplet['predicate']['RAW'] = trim($aux_verb) .
-                " " . $triplet['predicate']['RAW'];
-            if (!isset($triplet['predicate']['FEATURED'])) {
-                $triplet['predicate']['FEATURED'] = "";
-            }
-            $triplet['predicate']['FEATURED'] = trim($aux_verb) .
-                " " . $triplet['predicate']['FEATURED'];
-        }
-        if (isset($triplet['subject']['RAW'])
-            && isset($triplet['predicate']['RAW'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['subject']['RAW'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['predicate']['RAW'])
-        ) {
-            $generated_question_array['RAW']['1'] =
-                trim($triplet['subject']['RAW']) .
-                " " . trim($triplet['predicate']['RAW']) .
-                " " . trim(TripletExtractor::$question_word);
-            $generated_question_array['RAW']['2'] =
-                trim(TripletExtractor::$question_word) .
-                " " . trim($triplet['predicate']['RAW']) .
-                " " . trim($triplet['subject']['RAW']);
-        }
-        if (isset($triplet['subject']['FEATURED'])
-            && isset($triplet['predicate']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['subject']['FEATURED'])
-            && !TripletExtractor::isNullOrEmptyString(
-                $triplet['predicate']['FEATURED'])
-        ) {
-            $generated_question_array['FEATURED']['1'] =
-                trim($triplet['subject']['FEATURED']) .
-                " " . trim($triplet['predicate']['FEATURED']) .
-                " " . trim(TripletExtractor::$question_word);
-            $generated_question_array['FEATURED']['2'] =
-                trim(TripletExtractor::$question_word) .
-                " " . trim($triplet['predicate']['FEATURED']) .
-                " " . trim($triplet['subject']['FEATURED']);
-        }
-        return $generated_question_array;
-    }
-}
\ No newline at end of file
diff --git a/src/library/media_jobs/FeedsUpdateJob.php b/src/library/media_jobs/FeedsUpdateJob.php
index 04097cfee..474369c8a 100644
--- a/src/library/media_jobs/FeedsUpdateJob.php
+++ b/src/library/media_jobs/FeedsUpdateJob.php
@@ -557,7 +557,7 @@ class FeedsUpdateJob extends MediaJob
                     $media_category = "news";
                 }
                 $phrase_string = $item["TITLE"] . " ". $item["DESCRIPTION"];
-                $word_lists = PhraseParser::extractPhrasesInLists(
+                $word_and_qa_lists = PhraseParser::extractPhrasesInLists(
                     $phrase_string, $lang);
                 $raw_guid = L\unbase64Hash($item["GUID"]);
                 $doc_keys = L\crawlHash($item["LINK"], true) .
@@ -566,8 +566,8 @@ class FeedsUpdateJob extends MediaJob
                 $meta_ids = $this->calculateMetas($lang, $item['PUBDATE'],
                     $source_name, $item["GUID"], $media_category);
                 $prune_shard->addDocumentWords($doc_keys, $item['PUBDATE'],
-                    $word_lists, $meta_ids, PhraseParser::$materialized_metas,
-                    true, false);
+                    $word_and_qa_lists["WORD_LIST"], $meta_ids,
+                    PhraseParser::$materialized_metas, true, false);
             }
         }
         $prune_shard->save();
diff --git a/src/library/processors/ImageProcessor.php b/src/library/processors/ImageProcessor.php
index d082475c2..733f5bf15 100755
--- a/src/library/processors/ImageProcessor.php
+++ b/src/library/processors/ImageProcessor.php
@@ -68,11 +68,13 @@ class ImageProcessor extends PageProcessor
         imagesavealpha($thumb, true);
         $trans_colour = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
         imagefill($thumb, 0, 0, $trans_colour);
-        if ( isset($image) && $image !== false ) {
+        if ( !empty($image) ) {
             $size_x = imagesx($image);
             $size_y = imagesy($image);
+            restore_error_handler();
             @imagecopyresampled($thumb,
                 $image, 0,0, 0,0, C\THUMB_DIM, C\THUMB_DIM, $size_x, $size_y);
+            set_error_handler(C\NS_LIB . "yioop_error_handler");
             imagedestroy($image);
         }
         ob_start();
diff --git a/src/locale/ar/configure.ini b/src/locale/ar/configure.ini
index c187051c0..1b82e9a0b 100755
--- a/src/locale/ar/configure.ini
+++ b/src/locale/ar/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "خيارات الصفحة تحديث!"
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "تصفية تحديث الصفحات!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "حدد عنوان URL تم تحريرها مسبقاً"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "نتيجة تحديث الصفحة يحتاج إلى تحديد عنوان URL!"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "تحديث الصفحة النتيجة!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "تحميل الصفحة!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = "نوع الوسائط"
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = "فيديو"
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = "RSS"
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = "مؤشر/ميكس للاستخدام"
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = "مصدر الوسائط المضافة!"
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = "وأضاف سوبسيرتش!"
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = "مصدر الوسائط المحذوفة!"
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = "حذف سوبسيرتش!"
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "تسجيل الخروج الناجحة!!"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = "حفظ"
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "عرض  %s- %s من  %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "مؤقتاً"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "فيونبسب;as&nbsp;text"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "مماثلة"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "Inlinks"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "رتبة: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "ق Rel:%"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "ق Prox:%"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "نقاط: %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/bn/configure.ini b/src/locale/bn/configure.ini
index dd1ec4a67..f2c163b63 100755
--- a/src/locale/bn/configure.ini
+++ b/src/locale/bn/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/de/configure.ini b/src/locale/de/configure.ini
index bbc9dce32..d2f3f5df2 100755
--- a/src/locale/de/configure.ini
+++ b/src/locale/de/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/en_US/configure.ini b/src/locale/en_US/configure.ini
index c5a5e95f2..b70e644fe 100644
--- a/src/locale/en_US/configure.ini
+++ b/src/locale/en_US/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = "Month"
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = "Year"
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = "No Working Credit Card Script Found!"
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = "Invalid Credit Purchase Quantity"
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = "Credit Purchase"
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = "Starting Balance"
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = "Error: No Credit Token Received!"
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = "Payment Processing Error %s"
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = "Credit purchase complete!"
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = "Number of Days"
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = "1 day"
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = "7 days"
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = "30 days"
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = "90 days"
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = "180 days"
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = "Month"
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = "Year"
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = "Name, Description, Destination URL cannot be empty"
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = "Ad Duration Cannot Be Empty!"
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = "Please enter keywords"
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = "Please enter keywords"
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = "Bid too low! Calculate and bid  again!"
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = "Insufficient ad credits! Please purchase more credits! "
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = "Buy Ad"
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = "Advertisement created"
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = "Ad status changed!"
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = "Advertisement Updated"
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "Page Options Updated!"
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = "Running Tests!"
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = "Missing Scraper Fields!"
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = "Scraper added!"
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = "Scraper not deleted!"
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = "Scraper deleted!"
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = "Scraper Updated!"
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "Filter Pages Updated!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "Select a Previously Edited URL"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "Result Page Update needs to Specify the URL!"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "Result Page Updated!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "Page Loaded!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = "Media Kind"
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = "Video"
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = "RSS"
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = "JSON Feed"
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = "Html Feed"
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = "Regex Feed"
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = "Index/Mix to Use"
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = "Type of Source Not Set!"
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = "Must set media type!"
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = "Invalid URL!"
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = "All Fields Need to be Filled!"
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = "Media Source Added!"
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = "All Fields Need to be Filled!"
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = "Subsearch Added!"
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = "Source Was Not Deleted!"
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = "Media Source Deleted!"
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = "Source Was Not Deleted!"
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = "Subsearch Deleted!"
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = "Subsearch Updated!"
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = "Media Source Updated!"
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "Logout Successful!!"
 ; MachineController.php line: 213
 machine_controller_nolines = "No Lines Match Filter!"
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = "Cookies need to be enabled to register or log in to a Yioop!"
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = "Account created successfully!!"
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = "Account registration request has been sent!"
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = "Yioop User Has Requested Activation"
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = "User %s %s with username %s has requested activation of their account."
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = "Registration email sent!"
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = "Yioop User Has Requested Activation"
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = "Dear %s %s,"
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = "This email was given in a Yioop account creation request. If you are interested in a Yioop account please use the address below to complete the registration process."
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = "Email verification error!!"
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = "Account has already been activated!"
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = "Account successfully activated!!"
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = "Email verification error!!"
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = "Unable to recover account!"
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = "Unable to recover account!"
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = "Recover Account Email Sent!!"
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = "Yioop Account Recovery Request"
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = "Dear %s %s,"
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = "A request was made to recover your Yioop password. If this is correct, please paste the link below into a browser and complete the form presented."
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = "Unable to recover account!"
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = "Unable to recover account!"
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = "Unable to recover account!"
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = "Recover email already used!"
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = "Recover email has expired!"
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = "Password changed!"
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = "Passwords don&#039;t match!"
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = "Recover email already used!"
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = "Recover email has expired!"
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = "Resend Registration Fail!"
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = "Resend Registration Fail!"
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = "User Account Already Active!"
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = "Format of URL is invalid!"
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = "Starred fields need to be filled in correctly!"
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = "Hash Code Did Not Match!"
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = "Got human check questions wrong!"
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = "Captcha Mis-entered!"
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = "Suggest URL buffer is full! Please try again later!"
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = "Suggested URL saved!"
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = "Cookies need to be enabled to register or log in to a Yioop!"
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = "Got human check questions wrong!"
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = "Captcha Mis-entered!"
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = "Hash Code Did Not Match!"
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = "Starred fields need to be filled in correctly!"
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = "Check Email Address!"
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = "Account not created - Username already in use!!"
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = "After page rules applied"
 pageoptions_element_extracted_words = "Words and positions extracted to index from summary"
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = "Extracted Questions"
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = "Extracted meta words"
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = "Page Processing Times"
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = "Page Process Times:"
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = "Page Rule Process Times:"
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = "Canonicalize Terms:"
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = "Maximal Term Extraction:"
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = "Question Answer Extraction:"
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = "Total Time:"
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = "%s seconds"
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = "Back"
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = "Test Process Page"
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = "Save"
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "Showing %s - %s of %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = "Thesaurus Results"
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = "Possible Answer:"
+;
+; SearchView.php line: 351
 search_view_word_cloud = "Words:"
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "Cached"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "View&nbsp;as&nbsp;text"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "Similar"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "Inlinks"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "Rank:%s "
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "Rel:%s "
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "Prox:%s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = "Thesaurus: %s"
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "Score:%s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/en_US/resources/Tokenizer.php b/src/locale/en_US/resources/Tokenizer.php
index 2877d617e..afeabb139 100755
--- a/src/locale/en_US/resources/Tokenizer.php
+++ b/src/locale/en_US/resources/Tokenizer.php
@@ -329,18 +329,139 @@ class Tokenizer
      * modify the initial tag if necessary.
      *
      * @param string $phrase text to add parts speech tags to
+     * @param bool $with_tokens whether to include the terms and the tags
+     *      in the output string or just the part of speech tags
      * @return string $tagged_phrase phrase where each term has ~part_of_speech
-     *     appended
+     *      appended ($with_tokens == true) or just space separated
+     *      part_of_speech (!$with_tokens)
      */
-    public static function tagPartsOfSpeechPhrase($phrase)
+    public static function tagPartsOfSpeechPhrase($phrase, $with_tokens = true)
     {
-        preg_match_all("/[\w\d]+/", $phrase, $matches);
-        $tokens = $matches[0];
         $tagged_tokens = self::tagTokenizePartOfSpeech($phrase);
         $tagged_phrase  = self::taggedPartOfSpeechTokensToString(
-            $tagged_tokens);
+            $tagged_tokens, $with_tokens);
         return $tagged_phrase;
     }
+    /**
+     * Split input text into terms and output an array with one element
+     * per term, that element consisting of array with the term token
+     * and the part of speech tag.
+     *
+     * @param string $text string to tag and tokenize
+     * @return array of pairs of the form ("token" => token_for_term,
+     *     "tag"=> part_of_speech_tag_for_term) for one each token in $text
+     */
+   public static function tagTokenizePartOfSpeech($text)
+    {
+        static $dictionary = [];
+        if (empty($dictionary)) {
+            $fh = gzopen(C\LOCALE_DIR . "/en_US/resources/lexicon.txt.gz", 'r');
+            while ($line = gzgets($fh)) {
+                $tags = explode(' ', $line);
+                $dictionary[strtolower(array_shift($tags))] = $tags;
+            }
+            gzclose($fh);
+        }
+        preg_match_all("/[\w\d]+/", $text, $matches);
+        $tokens = $matches[0];
+        $nouns = ['NN', 'NNS', 'NNP'];
+        $verbs = ['VBD', 'VBP', 'VB'];
+        $result = [];
+        $previous = ['token' => -1, 'tag' => -1];
+        $previous_token = -1;
+        // now using our dictionary we tag
+        $i = 0;
+        $tag_list = [];
+        foreach ($tokens as $token) {
+            $prev_tag_list = $tag_list;
+            $tag_list = [];
+            // default to a common noun
+            $current = ['token' => $token, 'tag' => 'NN'];
+            // remove trailing full stops
+            $token = strtolower($token);
+            if (!empty($dictionary[$token])) {
+                $tag_list = $dictionary[$token];
+                $current['tag'] = $tag_list[0];
+            }
+            // Converts verbs after 'the' to nouns
+            if ($previous['tag'] == 'DT' && in_array($current['tag'], $verbs)){
+                $current['tag'] = 'NN';
+            }
+            // Convert noun to number if . appears
+            if ($current['tag'][0] == 'N' && strpos($token, '.') !== false) {
+                $current['tag'] = 'CD';
+            }
+            $ends_with = substr($token, -2);
+            switch ($ends_with) {
+                case 'ed':
+                    // Convert noun to past particle if ends with 'ed'
+                    if ($current['tag'][0] == 'N') {
+                        $current['tag'] = 'VBN';
+                    }
+                break;
+                case 'ly':
+                    // Anything that ends 'ly' is an adverb
+                    $current['tag'] = 'RB';
+                break;
+                case 'al':
+                    // Common noun to adjective if it ends with al
+                    if (in_array($current['tag'], $nouns)) {
+                        $current['tag'] = 'JJ';
+                    }
+                break;
+            }
+            // Noun to verb if the word before is 'would'
+            if ($current['tag'] == 'NN' && $previous_token == 'would') {
+                $current['tag'] = 'VB';
+            }
+            // Convert common noun to gerund
+            if (in_array($current['tag'], $nouns) &&
+                substr($token, -3) == 'ing') {
+                $current['tag'] = 'VBG';
+            }
+            //nouns followed by adjectives
+            if (in_array($previous['tag'], $nouns) &&
+                $current['tag'] == 'JJ' && in_array('JJ', $prev_tag_list)) {
+                $result[$i - 1]['tag'] = 'JJ';
+                $current['tag'] = 'NN';
+            }
+            /* If we get noun, and the second can be a verb,
+             * convert to verb; if noun noun and previous could be an
+             * adjective convert to adjective
+             */
+            if (in_array($previous['tag'], $nouns) &&
+                in_array($current['tag'], $nouns) ) {
+                if (in_array('VBN', $tag_list)) {
+                    $current['tag'] = 'VBN';
+                } else if (in_array('VBZ', $tag_list)) {
+                    $current['tag'] = 'VBZ';
+                } else if (in_array('JJ', $prev_tag_list)) {
+                    $result[$i - 1]['tag'] = 'JJ';
+                }
+            }
+            $result[$i] = $current;
+            $i++;
+            $previous = $current;
+            $previous_token = $token;
+        }
+        return $result;
+    }
+    /**
+     * Takes a phrase query entered by user and return true if it is question
+     * and false if not
+     *
+     * @param $phrase any statement
+     * @return bool returns true if statement is question
+     */
+    public function isQuestion($phrase)
+    {
+        $regex_starts_with_que =
+            "/^(who|what|which|where|when|whose|whome|how)(.*)$/";
+        if (preg_match($regex_starts_with_que, trim($phrase))) {
+            return true;
+        }
+        return false;
+    }
     /**
      * Computes the stem of an English word
      *
@@ -368,6 +489,24 @@ class Tokenizer
         self::step5();
         return substr(self::$buffer, 0, self::$k + 1);
     }
+    /**
+     * Take in a sentence and try to compress it to a smaller version
+     * that "retains the most important information and remains grammatically
+     * correct" (Jing 2000).
+     *
+     * @param string $sentence_to_compress the sentence to compress
+     * @return the compressed sentence
+     */
+    public static function compressSentence($sentence_to_compress)
+    {
+        $result = $sentence_to_compress;
+        $result = self::numberTwo($result);
+        $result = self::numberThree($result);
+        $result = self::numberFour($result);
+        $result = self::numberSix($result);
+        return $result;
+    }
+    // private methods for stemming
     /**
      * Checks to see if the ith character in the buffer is a consonant
      *
@@ -718,132 +857,18 @@ class Tokenizer
             self::doublec(self::$k) && self::m() > 1) self::$k--;
     }
     //private methods for part of speech tagging
-    /**
-     * Split input text into terms and output an array with one element
-     * per term, that element consisting of array with the term token
-     * and the part of speech tag.
-     *
-     * @param string $text string to tag and tokenize
-     * @return array of pairs of the form( "token" => token_for_term,
-     *     "tag"=> part_of_speech_tag_for_term) for one each token in $text
-     */
-    private static function tagTokenizePartOfSpeech($text)
-    {
-        static $lex_string = null;
-        if (!$lex_string) {
-            $lex_string = gzdecode(file_get_contents(
-                C\LOCALE_DIR . "/en_US/resources/lexicon.txt.gz"));
-        }
-        preg_match_all("/[\w\d]+/", $text, $matches);
-        $tokens = $matches[0];
-        $nouns = ['NN', 'NNS', 'NNP'];
-        $verbs = ['VBD', 'VBP', 'VB'];
-        $result = [];
-        $previous = ['token' => -1, 'tag' => -1];
-        $previous_token = -1;
-        sort($tokens);
-        $dictionary = [];
-        /*
-            Notice we sorted the tokens, and notice how we use $cur_pos
-            so only advance forward through $lex_string. So the
-            run time of this is bound by at most one scan of $lex_string
-         */
-        $cur_pos = 0;
-        foreach ($tokens as $token) {
-            $token = strtolower(rtrim($token, "."));
-            $token_pos = stripos($lex_string, "\n".$token." ", $cur_pos);
-            if ($token_pos !== false) {
-                $token_pos++;
-                $cur_pos = stripos($lex_string, "\n", $token_pos);
-                $line = trim(substr($lex_string, $token_pos,
-                    $cur_pos - $token_pos));
-                $tag_list = explode(' ', $line);
-                $dictionary[strtolower(rtrim($token, "."))] =
-                    array_slice($tag_list, 1);
-                $cur_pos++;
-            }
-        }
-        // now using our dictionary we tag
-        $i = 0;
-        $tag_list = [];
-        foreach ($matches[0] as $token) {
-            $prev_tag_list = $tag_list;
-            $tag_list = [];
-            // default to a common noun
-            $current = ['token' => $token, 'tag' => 'NN'];
-            // remove trailing full stops
-            $token = strtolower(rtrim($token, "."));
-            if (isset($dictionary[$token])) {
-                $tag_list = $dictionary[$token];
-                $current['tag'] = $tag_list[0];
-            }
-            // Converts verbs after 'the' to nouns
-            if ($previous['tag'] == 'DT' && in_array($current['tag'], $verbs)){
-                $current['tag'] = 'NN';
-            }
-            // Convert noun to number if . appears
-            if ($current['tag'][0] == 'N' && strpos($token, '.') !== false) {
-                $current['tag'] = 'CD';
-            }
-            $ends_with = substr($token, -2);
-            switch ($ends_with) {
-                case 'ed':
-                    // Convert noun to past particle if ends with 'ed'
-                    if ($current['tag'][0] == 'N') { $current['tag'] = 'VBN'; }
-                break;
-                case 'ly':
-                    // Anything that ends 'ly' is an adverb
-                    $current['tag'] = 'RB';
-                break;
-                case 'al':
-                    // Common noun to adjective if it ends with al
-                    if (in_array($current['tag'], $nouns)) {
-                        $current['tag'] = 'JJ';
-                    }
-                break;
-            }
-            // Noun to verb if the word before is 'would'
-            if ($current['tag'] == 'NN' && $previous_token == 'would') {
-                $current['tag'] = 'VB';
-            }
-            // Convert common noun to gerund
-            if (in_array($current['tag'], $nouns) &&
-                substr($token, -3) == 'ing') { $current['tag'] = 'VBG'; }
-            //nouns followed by adjectives
-            if (in_array($previous['tag'], $nouns) &&
-                $current['tag'] == 'JJ' && in_array('JJ', $prev_tag_list)) {
-                $result[$i - 1]['tag'] = 'JJ';
-                $current['tag'] = 'NN';
-            }
-            /* If we get noun noun, and the second can be a verb,
-             * convert to verb; if noun noun and previous could be an
-             * adjective convert to adjective
-             */
-            if (in_array($previous['tag'], $nouns) &&
-                in_array($current['tag'], $nouns) ) {
-                if (in_array('VBN', $tag_list)) {
-                    $current['tag'] = 'VBN';
-                } else if (in_array('VBZ', $tag_list)) {
-                    $current['tag'] = 'VBZ';
-                } else if (in_array('JJ', $prev_tag_list)) {
-                    $result[$i - 1]['tag'] = 'JJ';
-                }
-            }
-            $result[$i] = $current;
-            $i++;
-            $previous = $current;
-            $previous_token = $token;
-        }
-        return $result;
-    }
     /**
      * Takes an array of pairs (token, tag) that came from phrase
      * and builds a new phrase where terms look like token~tag.
      *
      * @param array $tagged_tokens array pairs as might come from tagTokenize
+     * @param bool $with_tokens whether to include the terms and the tags
+     *      in the output string or just the part of speech tags
      * @return $tagged_phrase a phrase with terms in the format token~tag
+     *      ($with_token == true) or space separated tags (!$with_token).
      */
-    private static function taggedPartOfSpeechTokensToString($tagged_tokens)
+    private static function taggedPartOfSpeechTokensToString($tagged_tokens,
+        $with_tokens = true)
     {
         $tagged_phrase = "";
         $simplified_parts_of_speech = [
@@ -858,27 +883,12 @@ class Tokenizer
             $tag = trim($t['tag']);
             $tag = (isset($simplified_parts_of_speech[$tag])) ?
                 $simplified_parts_of_speech[$tag] : $tag;
-            $tagged_phrase .= $t['token'] . "~" . $tag .  " ";
+            $token = ($with_tokens) ? $t['token'] . "~" : "";
+            $tagged_phrase .= $token . $tag .  " ";
         }
         return $tagged_phrase;
- }
-    /**
-     * Take in a sentence and try to compress it to a smaller version
-     * that "retains the most important information and remains grammatically
-     * correct" (Jing 2000).
-     *
-     * @param string $sentence_to_compress the sentence to compress
-     * @return the compressed sentence
-     */
-    public static function compressSentence($sentence_to_compress)
-    {
-        $result = $sentence_to_compress;
-        $result = self::numberTwo($result);
-        $result = self::numberThree($result);
-        $result = self::numberFour($result);
-        $result = self::numberSix($result);
-        return $result;
     }
+    //private methods for sentence compression
     /**
      * From Back to Basics: CLASSY 2006 page 3:
      * 2. We remove many adverbs and all conjunctions, including phrases such
@@ -946,4 +956,4 @@ class Tokenizer
             "(,\s?when[^,]*,)|(,\s?where[^,]*,)/i", "", $result);
         return $result;
     }
-}
\ No newline at end of file
+}
diff --git a/src/locale/es/configure.ini b/src/locale/es/configure.ini
index 7ff4c4012..d6b8ed206 100755
--- a/src/locale/es/configure.ini
+++ b/src/locale/es/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "Filtrar P&aacute;ginas Actualizadas!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "Seleccionar una URL previamente editada"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "Resultados de la actualizaci&oacute;n de la p&aacute;gina debe especificar la URL!"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "P&aacute;gina Actualizada!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "P&aacute;gina Cargada!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "Se ha cerrado la sesi&oacute;n con &eacut
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/fa/configure.ini b/src/locale/fa/configure.ini
index 180be6e2e..9ec541210 100755
--- a/src/locale/fa/configure.ini
+++ b/src/locale/fa/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "تنظیمات صفحه به روز شد
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "پالایه صفحات به روز شد!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "یک URL که قبلن ویرایش شده انتخاب کنید"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "به روز رسانی صفحهٔ نتایج احتیاج به تعیین URL دارد! "
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "صفحهٔ نتایج به روز آوری شد!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "صفحه بارگذاری شد!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = "نوع رسانه"
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = "ویدیو"
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = "RSS"
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = "نمایه/ترکیب مورد استفاده"
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = "منبع رسانه&zwnj;ها اضافه شد!"
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = "زیرجستجو اضافه شد!"
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = "منبع رسانه&zwnj;ها حذف شد!"
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = "زیر جستجو حذف شد!"
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "با موفقیت خارج شدید!!"
 ; MachineController.php line: 213
 machine_controller_nolines = "هیچ خطی با این فیلتر مطابق نیست!"
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = "ذخیره"
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "در حال نمایش %s - %s از %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "کش شده"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "مشاهده به صورت متنی"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "مشابه"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "پیوندهای داخلی"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "رتبه: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "ارتباط: %s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "نزدیکی: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "امتیاز: %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/fr_FR/configure.ini b/src/locale/fr_FR/configure.ini
index 4a7fc9891..0ba374e90 100755
--- a/src/locale/fr_FR/configure.ini
+++ b/src/locale/fr_FR/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "Affichage de %s - %s sur %s r&eacute;sultats"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "En&nbsp;Cache"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "Version&nbsp;texte"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "Pages&nbsp;similaires"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "Liens retour"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "Rang: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "Pertinence: %s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "Proximit&eacute;: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "Total: %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/he/configure.ini b/src/locale/he/configure.ini
index fbd19b48f..e533970df 100755
--- a/src/locale/he/configure.ini
+++ b/src/locale/he/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "התנתקות הצליחה"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/hi/configure.ini b/src/locale/hi/configure.ini
index 874a29f4b..959ca1625 100755
--- a/src/locale/hi/configure.ini
+++ b/src/locale/hi/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "लॉग आउट सफल"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/in_ID/configure.ini b/src/locale/in_ID/configure.ini
index ed130af0b..e5c940fb9 100755
--- a/src/locale/in_ID/configure.ini
+++ b/src/locale/in_ID/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "Logout berhasil"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "Hasil"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "Urutan"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/it/configure.ini b/src/locale/it/configure.ini
index ed03094ef..14b6ed966 100755
--- a/src/locale/it/configure.ini
+++ b/src/locale/it/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "Opzioni Pagina aggiornate!"
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "Filtro Pagina aggiornato!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "Seleziona un URL precedentemente modificato"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "Aggiornamento pagina dei risultati necessita specificare URL!"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "Pagina dei risultatai aggiornata!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "Pagina caricata!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "Accesso eseguito!!"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = "Salva"
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "Mostra risultati %s - %s di %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "Archivio"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "Vedi&nbsp;come&nbsp;testo"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "Simile"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "Inlink"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "Pos.: %s "
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "Rel: %s "
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "Pros: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "Punteggio %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/ja/configure.ini b/src/locale/ja/configure.ini
index bc20aabb1..25b912e63 100755
--- a/src/locale/ja/configure.ini
+++ b/src/locale/ja/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "ログアウト成功"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "結果表示%s ー %s の %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "キャッシューしました。"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "テクストビュー"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "同じビュー"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "ランク:%s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "関連:%s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "近さ: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "スコア %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/kn/configure.ini b/src/locale/kn/configure.ini
index 23e8dfcd7..7f482727b 100755
--- a/src/locale/kn/configure.ini
+++ b/src/locale/kn/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "ತೋರಿಸುತ್ತಿರುವ ಫಲಿತಾ
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "ಸಿದ್ಧ ಸ್ಮೃತಿಕೋಶದಿಂದ ನೋಡಿ"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "ಪಠ್ಯ ರೂಪದಲ್ಲಿ ನೋಡಿ"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "ಸಮಾನರೂಪದ"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "ಒಳ ಕೊಂಡಿ"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "ಸ್ಥಾನ: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "ಪ್ರಾಸ್ತಾವಿಕ: %s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "ಸಾನಿಧ್ಯ: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "ಅಂಕ: %s "
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/ko/configure.ini b/src/locale/ko/configure.ini
index 71986d878..40d2b9938 100755
--- a/src/locale/ko/configure.ini
+++ b/src/locale/ko/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "로그 아웃 성공!!"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "결과 %s - %s 의 %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "캐시 됀것"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "일반 텍스트로써 보기"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "유사성"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "인링크"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "랭크: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "관련성: %s "
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "점수 %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/nl/configure.ini b/src/locale/nl/configure.ini
index 625c6a3e0..d08ab2541 100644
--- a/src/locale/nl/configure.ini
+++ b/src/locale/nl/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "Opties voor de pagina Bijgewerkt!"
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = "Uitvoeren van tests!"
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "Filter Paginas Bijgewerkt!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "Selecteer een Eerder Bewerkt URL"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "Resultaat Pagina update nodig heeft om de URL opgeven!"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "Resultaat Pagina bijgewerkt!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "Page Loaded!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = "media Kind"
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = "video"
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = "RSS"
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = "Html Feed"
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = "Index / Mix te gebruiken"
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = "Type Bron onbekend!"
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = "Moet mediatype ingesteld!"
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = "Ongeldige URL!"
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = "Alle velden moeten worden ingevuld!"
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = "Media Source toegevoegd!"
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = "Alle velden moeten worden ingevuld!"
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = "Subsearch toegevoegd!"
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = "Bron niet is verdwenen!"
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = "Media Source Deleted!"
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = "Bron niet is verdwenen!"
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = "Subsearch Deleted!"
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = "Subsearch Bijgewerkt!"
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = "Media Source Bijgewerkt!"
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "Afmelden Succesvolle!!"
 ; MachineController.php line: 213
 machine_controller_nolines = "Geen Lijnen Match Filter!"
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = "Cookies moeten worden ingeschakeld om te registreren of log in om een Yioop!"
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = "Houdend met succes aangemaakt!!"
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = "Account registratie aanvraag is verzonden!"
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = "Yioop gebruiker heeft Gevraagde Activering"
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = "Gebruiker %s %s met gebruikersnaam %s heeft verzocht de activering van hun rekening."
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = "Registratie e-mail gestuurd!"
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = "Yioop gebruiker heeft Gevraagde Activering"
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = "Geachte %s %s,"
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = "Deze e-mail werd gegeven in een rekeningsverwezenlijking verzoek Yioop. Als u ge&iuml;nteresseerd bent in een Yioop rekening zijn wij u hieronder het adres gebruiken het registratieproces te voltooien."
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = "E-mail verificatie fout!!"
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = "Account is al geactiveerd!"
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = "Account succesvol geactiveerd!!"
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = "E-mail verificatie fout!!"
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = "Niet in staat om rekening te herstellen!"
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = "Niet in staat om rekening te herstellen!"
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = "Recover account E Verzonden!!"
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = "Yioop Account Recovery Request"
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = "Geachte %s %s,"
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = "Een verzoek werd gedaan om uw Yioop wachtwoord te achterhalen. Als dit juist is, dan kunt u plak de onderstaande link in een browser en vul het formulier gepresenteerd."
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = "Niet in staat om rekening te herstellen!"
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = "Niet in staat om rekening te herstellen!"
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = "Niet in staat om rekening te herstellen!"
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = "Recover e-mail al gebruikt!"
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = "Recover e-mail is verlopen!"
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = "Wachtwoord veranderd!"
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = "Wachtwoorden komen niet overeen!"
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = "Recover e-mail al gebruikt!"
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = "Recover e-mail is verlopen!"
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = "Formaat van URL is ongeldig!"
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = "Starred velden moeten correct worden ingevuld!"
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = "Hash-code niet overeen!"
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = "Kreeg de menselijke controle vragen verkeerd!"
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = "Captcha Mis-aangegaan!"
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = "Suggereren URL buffer vol is! Probeer het later opnieuw!"
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = "Gesuggereerd URL gered!"
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = "Cookies moeten worden ingeschakeld om te registreren of log in om een Yioop!"
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = "Kreeg de menselijke controle vragen verkeerd!"
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = "Captcha Mis-aangegaan!"
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = "Hash-code niet overeen!"
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = "Starred velden moeten correct worden ingevuld!"
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = "Controleer e-mailadres!"
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = "Geen account aangemaakt - Gebruikersnaam al in gebruik!!"
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = "Na pagina regels toegepast"
 pageoptions_element_extracted_words = "Woorden en posities uitgepakt index samenvatting"
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = "Onttrokken meta woorden"
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = "terug"
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = "Test Process Pagina"
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = "Opslaan"
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "Toont %s - %s van %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = "thesaurus Resultaten"
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = "woorden:"
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "gecached"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "Bekijk & nbsp; als & nbsp; tekst"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "soortgelijk"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "inlinks"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "Rang: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "Rel: %s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "Prox: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = "Thesaurus: %s"
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "Score: %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/pl/configure.ini b/src/locale/pl/configure.ini
index aaf5f2f7a..7ef2aad05 100755
--- a/src/locale/pl/configure.ini
+++ b/src/locale/pl/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/pt/configure.ini b/src/locale/pt/configure.ini
index 3233c1949..194f45e51 100755
--- a/src/locale/pt/configure.ini
+++ b/src/locale/pt/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/ru/configure.ini b/src/locale/ru/configure.ini
index 186824c95..9e5d70e5a 100755
--- a/src/locale/ru/configure.ini
+++ b/src/locale/ru/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/te/configure.ini b/src/locale/te/configure.ini
index 964187274..eb0894b71 100644
--- a/src/locale/te/configure.ini
+++ b/src/locale/te/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "పేజ్ ఆప్షన్లు
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = "టెస్ట్లు నడుస్తున్నవి!"
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "ఫిల్టర్ పేజీలు నవీకరించబడినవి!"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "ఇంతకముందు ఎడిట్ చేసిన యుఆరెల్ ని ఎంచుకోండి"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "ఫలితాల పేజీ అప్డేట్ కోసం యుఆర్ఎల్ పేర్కొనండి!"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "ఫలితాల పేజీలు అప్డేట్ అయినవి!"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "పేజ్ లోడ్ అయినది!"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = "మీడియా రకం"
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = "వీడియో "
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = "ఆర్ ఎస్ ఎస్ "
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = "హెచ్ టి యమ్ ఎల్ ఫీడ్ "
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = "సూచిక/మిక్స్ ఉపయోగించడానికి"
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = "సోర్స్ టైపు ఇంకా సెట్ చేయలేదు!"
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = "మీడియా సెట్ టైప్ చేయాలి!"
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = "చెల్లని యుఆర్ఎల్!"
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = "అన్ని ఖాళీలను భర్తీ చేయాలి!"
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = "మీడియా సోర్సు ఆడ్ చేయడమైనది!"
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = "అన్ని ఖాళీలను భర్తీ చేయాలి!"
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = "సబ్ సెర్చ్ ఆడ్ చేయడమైనది!"
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = "సోర్స్ డిలీట్ చెయ్యబడలేదు!"
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = "మీడియా సోర్సు డిలీట్ చేయడమైనది!"
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = "సోర్స్ డిలీట్ చెయ్యబడలేదు!"
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = "సబ్ సెర్చ్ డిలీట్ చేయడమైనది!"
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = "సబ్ సెర్చ్ అప్డేట్ చేయడమైనది!"
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = "మీడియా సోర్సు అప్డేట్ చేయడమైనది!"
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "లాగౌట్ విజయవంత
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = "ఖాతావిజయవంతంగా సృష్టించబడినది!!"
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = "ఖాతా నమోదు అభ్యర్థన పంపబడింది!"
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = "Yioop యూజర్ ఆక్టివేట్ చేయమని అభ్యర్థించారు"
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = "యూజర్ %s %s పేరు తో %s వారి ఖాతా ఆక్టివేషన్ అభ్యర్థించారు."
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = "నమోదు ఇమెయిల్ పంపిచబడినది!"
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = "Yioop యూజర్ ఆక్టివేట్ చేయమని అభ్యర్థించారు"
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = "ప్రియమైన %s %s,"
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = "ఈ ఇమెయిల్ ఖాతా నమోదు అభ్యర్థనలో ఇవ్వబడింది. మీకు Yioop ఖాతాఫై ఆసక్తి ఉంటే, దయచేసి నమోదు ప్రక్రియ పూర్తి చేయడానికి ఈ క్రింది చిరునామాను ఉపయోగించండి."
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = "ఇమెయిల్ ధృవీకరణ లోపం!!"
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = "ఖాతా ఇదివరకే యాక్టివేట్ చేయబడింది!"
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = "ఖాతా విజయవంతంగా యాక్టివేట్ చేయబడింది"
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = "ఇమెయిల్ ధృవీకరణ లోపం!!"
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = "ఖాతా పునరుద్ధరించలేకపోయింది!"
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = "ఖాతా పునరుద్ధరించలేకపోయింది!"
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = "ఖాతా పునరుద్ధరన ఇమెయిల్ పంపిచబడినది!!"
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = "Yioop ఖాతా పునరుద్ధరన అభ్యర్థన"
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = "ప్రియమైన %s %s,"
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = "ఖాతా పునరుద్ధరించలేకపోయింది!"
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = "ఖాతా పునరుద్ధరించలేకపోయింది!"
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = "ఖాతా పునరుద్ధరించలేకపోయింది!"
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = "పునరుద్ధరన ఇమెయిల్ ఇదివరకే వాడబడినది!"
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = "పునరుద్ధరన ఇమెయిల్ గడువు ముగిసింది!"
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = "పాస్ వర్డ్ మార్చబడినది!"
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = "పాస్ వర్డ్స్ సరిపోలడం లేదు!"
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = "పునరుద్ధరన ఇమెయిల్ ఇదివరకే వాడబడినది!"
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = "పునరుద్ధరన ఇమెయిల్ గడువు ముగిసింది!"
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = "యుఆర్ఎల్ యొక్క ఫార్మాట్ చెల్లదు!"
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = "స్టార్ ఉన్న ఫీల్డ్స్ తప్పని సరిగా పూర్తి చేయాలి!"
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = "హాష్ కోడ్ సరిపోలడం లేదు!"
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = "మానవ చెక్ ప్రశ్నలు తప్పు వచ్చాయి!"
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = "కాప్చ సరికాదు!"
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = "సూచించిన యుఆర్ఎల్ బఫర్ నిండి పోయినది. దయచేసి కాసేపు ఆగి మరలా ప్రయత్నించండి!"
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = "సూచించిన యుఆర్ఎల్ సేవ్ చేయబడినది!"
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = "మానవ చెక్ ప్రశ్నలు తప్పు వచ్చాయి!"
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = "కాప్చ సరికాదు!"
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = "హాష్ కోడ్ సరిపోలడం లేదు!"
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = "స్టార్ ఉన్న ఫీల్డ్స్ తప్పని సరిగా పూర్తి చేయాలి!"
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = "ఇ-మెయిల్ చిరునామా మరోసారి పరిశీలించండి! "
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = "ఖాతా సృస్టించలేదు - యూజర్ పేరు వాడుకలో వున్నది!!"
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "చూపించేది %s - %s of %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = "థెసారస్ ఫలితాలు"
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = "వర్డ్స్:"
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "కేష్ చేయబడినవి"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "టెక్ష్ట్ లాగ చూపించు"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "ఒకే రకం"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = "ఇన్ లింక్స్"
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "రేంక్:%s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "సంబంధిత:%s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "సామీప్యత:%s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = "థెసారస్: %s"
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "స్కోర్:%s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/th/configure.ini b/src/locale/th/configure.ini
index ed539a097..d2fc9fcc7 100755
--- a/src/locale/th/configure.ini
+++ b/src/locale/th/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/tr/configure.ini b/src/locale/tr/configure.ini
index 0b4372a5d..49236a946 100755
--- a/src/locale/tr/configure.ini
+++ b/src/locale/tr/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = ""
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = ""
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = ""
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = ""
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = ""
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/vi_VN/configure.ini b/src/locale/vi_VN/configure.ini
index 1ca87b479..5228d79a2 100755
--- a/src/locale/vi_VN/configure.ini
+++ b/src/locale/vi_VN/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = ""
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = ""
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = ""
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = ""
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = ""
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = ""
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = ""
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = ""
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = ""
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = ""
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = ""
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = "Tho&aacute;t th&agrave;nh c&ocirc;ng"
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "Cho kết quả tứ %s - %s của %s"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = "Trang&nbsp;gốc"
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = "Trang&nbsp;Web&nbsp;Bắng Chữ"
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "Tương&nbsp;Tự"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "Thứ Tự: %s"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "Th&iacute;ch hợp: %s"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = "Gần: %s"
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "Điểm: %s"
 ;
 ; SettingsView.php line: 66
diff --git a/src/locale/zh_CN/configure.ini b/src/locale/zh_CN/configure.ini
index 36c264ec1..23243daf5 100755
--- a/src/locale/zh_CN/configure.ini
+++ b/src/locale/zh_CN/configure.ini
@@ -285,79 +285,79 @@ advertisement_component_month = ""
 ; AdvertisementComponent.php line: 80
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 108
+; AdvertisementComponent.php line: 109
 advertisement_component_script_failure = ""
 ;
-; AdvertisementComponent.php line: 117
+; AdvertisementComponent.php line: 118
 advertisement_component_invalid_credit_quantity = ""
 ;
-; AdvertisementComponent.php line: 120
+; AdvertisementComponent.php line: 121
 advertisement_component_buy_credits = ""
 ;
-; AdvertisementComponent.php line: 121
+; AdvertisementComponent.php line: 122
 advertisement_model_init_ledger = ""
 ;
-; AdvertisementComponent.php line: 126
+; AdvertisementComponent.php line: 129
 advertisement_component_credit_token_empty = ""
 ;
-; AdvertisementComponent.php line: 134
+; AdvertisementComponent.php line: 136
 advertisement_component_processing_error = ""
 ;
-; AdvertisementComponent.php line: 141
+; AdvertisementComponent.php line: 144
 advertisement_component_credits_purchased = ""
 ;
-; AdvertisementComponent.php line: 165
+; AdvertisementComponent.php line: 168
 advertisement_component_num_days = ""
 ;
-; AdvertisementComponent.php line: 166
+; AdvertisementComponent.php line: 169
 advertisement_component_one_day = ""
 ;
-; AdvertisementComponent.php line: 167
+; AdvertisementComponent.php line: 170
 advertisement_component_seven_days = ""
 ;
-; AdvertisementComponent.php line: 168
+; AdvertisementComponent.php line: 171
 advertisement_component_thirty_days = ""
 ;
-; AdvertisementComponent.php line: 169
+; AdvertisementComponent.php line: 172
 advertisement_component_ninety_days = ""
 ;
-; AdvertisementComponent.php line: 170
+; AdvertisementComponent.php line: 173
 advertisement_component_one_eighty_days = ""
 ;
-; AdvertisementComponent.php line: 180
+; AdvertisementComponent.php line: 183
 advertisement_component_month = ""
 ;
-; AdvertisementComponent.php line: 187
+; AdvertisementComponent.php line: 190
 advertisement_component_year = ""
 ;
-; AdvertisementComponent.php line: 211
+; AdvertisementComponent.php line: 214
 advertisement_component_fields_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 216
+; AdvertisementComponent.php line: 219
 advertisement_component_duration_cannot_be_empty = ""
 ;
-; AdvertisementComponent.php line: 221
+; AdvertisementComponent.php line: 224
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 259
+; AdvertisementComponent.php line: 262
 advertisement_component_enter_keywords = ""
 ;
-; AdvertisementComponent.php line: 265
+; AdvertisementComponent.php line: 268
 advertisement_component_bid_too_low = ""
 ;
-; AdvertisementComponent.php line: 270
+; AdvertisementComponent.php line: 273
 advertisement_component_too_few_credits = ""
 ;
-; AdvertisementComponent.php line: 274
+; AdvertisementComponent.php line: 277
 advertisement_component_buy_ad = ""
 ;
-; AdvertisementComponent.php line: 286
+; AdvertisementComponent.php line: 289
 advertisement_component_ad_created = ""
 ;
-; AdvertisementComponent.php line: 320
+; AdvertisementComponent.php line: 323
 advertisement_component_status_changed = ""
 ;
-; AdvertisementComponent.php line: 365
+; AdvertisementComponent.php line: 368
 advertisement_component_ad_updated = ""
 ;
 ; CrawlComponent.php line: 93
@@ -528,94 +528,94 @@ crawl_component_page_options_updated = "更新頁面選項"
 ; CrawlComponent.php line: 1209
 crawl_component_page_options_running_tests = ""
 ;
-; CrawlComponent.php line: 1407
+; CrawlComponent.php line: 1424
 crawl_component_scraper_missing = ""
 ;
-; CrawlComponent.php line: 1415
+; CrawlComponent.php line: 1432
 crawl_component_scraper_added = ""
 ;
-; CrawlComponent.php line: 1421
+; CrawlComponent.php line: 1438
 crawl_component_no_delete_scraper = ""
 ;
-; CrawlComponent.php line: 1427
+; CrawlComponent.php line: 1444
 crawl_component_scraper_deleted = ""
 ;
-; CrawlComponent.php line: 1462
+; CrawlComponent.php line: 1479
 crawl_component_scraper_updated = ""
 ;
-; CrawlComponent.php line: 1501
+; CrawlComponent.php line: 1518
 crawl_component_results_editor_update = "編輯者更新結果"
 ;
-; CrawlComponent.php line: 1516
+; CrawlComponent.php line: 1533
 crawl_component_edited_pages = "編輯頁面"
 ;
-; CrawlComponent.php line: 1529
+; CrawlComponent.php line: 1546
 crawl_component_results_editor_need_url = "需要網址"
 ;
-; CrawlComponent.php line: 1536
+; CrawlComponent.php line: 1553
 crawl_component_results_editor_page_updated = "更新頁面"
 ;
-; CrawlComponent.php line: 1550
+; CrawlComponent.php line: 1567
 crawl_component_results_editor_page_loaded = "載入頁面"
 ;
-; CrawlComponent.php line: 1581
+; CrawlComponent.php line: 1598
 crawl_component_media_kind = "多媒體類別"
 ;
-; CrawlComponent.php line: 1582
+; CrawlComponent.php line: 1599
 crawl_component_video = "影片"
 ;
-; CrawlComponent.php line: 1583
+; CrawlComponent.php line: 1600
 crawl_component_rss_feed = "RSS"
 ;
-; CrawlComponent.php line: 1584
+; CrawlComponent.php line: 1601
 crawl_component_json_feed = ""
 ;
-; CrawlComponent.php line: 1585
+; CrawlComponent.php line: 1602
 crawl_component_html_feed = ""
 ;
-; CrawlComponent.php line: 1586
+; CrawlComponent.php line: 1603
 crawl_component_regex_feed = ""
 ;
-; CrawlComponent.php line: 1601
+; CrawlComponent.php line: 1618
 crawl_component_sources_indexes = ""
 ;
-; CrawlComponent.php line: 1657
+; CrawlComponent.php line: 1674
 crawl_component_no_source_type = ""
 ;
-; CrawlComponent.php line: 1672
+; CrawlComponent.php line: 1689
 crawl_component_missing_type = ""
 ;
-; CrawlComponent.php line: 1686
+; CrawlComponent.php line: 1703
 crawl_component_invalid_url = ""
 ;
-; CrawlComponent.php line: 1693
+; CrawlComponent.php line: 1710
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1711
+; CrawlComponent.php line: 1728
 crawl_component_media_source_added = "增加多媒體"
 ;
-; CrawlComponent.php line: 1724
+; CrawlComponent.php line: 1741
 crawl_component_missing_fields = ""
 ;
-; CrawlComponent.php line: 1732
+; CrawlComponent.php line: 1749
 crawl_component_subsearch_added = ""
 ;
-; CrawlComponent.php line: 1738
+; CrawlComponent.php line: 1755
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1744
+; CrawlComponent.php line: 1761
 crawl_component_media_source_deleted = "刪除多媒體"
 ;
-; CrawlComponent.php line: 1751
+; CrawlComponent.php line: 1768
 crawl_component_no_delete_source = ""
 ;
-; CrawlComponent.php line: 1758
+; CrawlComponent.php line: 1775
 crawl_component_subsearch_deleted = ""
 ;
-; CrawlComponent.php line: 1793
+; CrawlComponent.php line: 1810
 crawl_component_subsearch_updated = ""
 ;
-; CrawlComponent.php line: 1881
+; CrawlComponent.php line: 1898
 crawl_component_media_source_updated = ""
 ;
 ; SocialComponent.php line: 91
@@ -1551,139 +1551,139 @@ search_controller_logout_successful = ""
 ; MachineController.php line: 213
 machine_controller_nolines = ""
 ;
-; RegisterController.php line: 243
+; RegisterController.php line: 254
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 310
+; RegisterController.php line: 321
 register_controller_account_created = ""
 ;
-; RegisterController.php line: 359
+; RegisterController.php line: 370
 register_controller_account_request_made = ""
 ;
-; RegisterController.php line: 363
+; RegisterController.php line: 374
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 364
+; RegisterController.php line: 375
 register_controller_admin_activation_message = ""
 ;
-; RegisterController.php line: 392
+; RegisterController.php line: 403
 register_controller_registration_email_sent = ""
 ;
-; RegisterController.php line: 394
+; RegisterController.php line: 405
 register_controller_admin_activation_request = ""
 ;
-; RegisterController.php line: 395
+; RegisterController.php line: 406
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 397
+; RegisterController.php line: 408
 register_controller_email_body = ""
 ;
-; RegisterController.php line: 433
+; RegisterController.php line: 444
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 439
+; RegisterController.php line: 450
 register_controller_already_activated = ""
 ;
-; RegisterController.php line: 446
+; RegisterController.php line: 457
 register_controller_account_activated = ""
 ;
-; RegisterController.php line: 449
+; RegisterController.php line: 460
 register_controller_email_verification_error = ""
 ;
-; RegisterController.php line: 497
+; RegisterController.php line: 508
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 508
+; RegisterController.php line: 519
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 512
+; RegisterController.php line: 523
 register_controller_account_recover_email = ""
 ;
-; RegisterController.php line: 516
+; RegisterController.php line: 527
 register_controller_recover_request = ""
 ;
-; RegisterController.php line: 517
+; RegisterController.php line: 528
 register_controller_admin_email_salutation = ""
 ;
-; RegisterController.php line: 519
+; RegisterController.php line: 530
 register_controller_recover_body = ""
 ;
-; RegisterController.php line: 554
+; RegisterController.php line: 565
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 566
+; RegisterController.php line: 577
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 580
+; RegisterController.php line: 591
 register_controller_account_recover_fail = ""
 ;
-; RegisterController.php line: 587
+; RegisterController.php line: 598
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 591
+; RegisterController.php line: 602
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 597
+; RegisterController.php line: 608
 register_controller_password_changed = ""
 ;
-; RegisterController.php line: 605
+; RegisterController.php line: 616
 register_controller_passwords_dont_match = ""
 ;
-; RegisterController.php line: 619
+; RegisterController.php line: 630
 register_controller_recovered_already = ""
 ;
-; RegisterController.php line: 623
+; RegisterController.php line: 634
 register_controller_recovery_expired = ""
 ;
-; RegisterController.php line: 677
+; RegisterController.php line: 688
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 689
+; RegisterController.php line: 700
 register_controller_email_resend_fail = ""
 ;
-; RegisterController.php line: 693
+; RegisterController.php line: 704
 register_controller_user_active_fail = ""
 ;
-; RegisterController.php line: 811
+; RegisterController.php line: 822
 register_controller_invalid_url = ""
 ;
-; RegisterController.php line: 815
+; RegisterController.php line: 826
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 828
+; RegisterController.php line: 839
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 838
+; RegisterController.php line: 849
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 865
+; RegisterController.php line: 876
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 900
+; RegisterController.php line: 911
 register_controller_suggest_full = ""
 ;
-; RegisterController.php line: 904
+; RegisterController.php line: 915
 register_controller_url_submitted = ""
 ;
-; RegisterController.php line: 1138
+; RegisterController.php line: 1149
 register_controller_need_cookies = ""
 ;
-; RegisterController.php line: 1144
+; RegisterController.php line: 1155
 register_controller_failed_human = ""
 ;
-; RegisterController.php line: 1159
+; RegisterController.php line: 1170
 register_controller_failed_graphical_human = ""
 ;
-; RegisterController.php line: 1170
+; RegisterController.php line: 1181
 register_controller_failed_hashcode = ""
 ;
-; RegisterController.php line: 1198
+; RegisterController.php line: 1209
 register_controller_error_fields = ""
 ;
-; RegisterController.php line: 1201
+; RegisterController.php line: 1212
 register_controller_check_email = ""
 ;
-; RegisterController.php line: 1208
+; RegisterController.php line: 1219
 register_controller_user_already_exists = ""
 ;
 ; SearchController.php line: 284
@@ -3650,15 +3650,42 @@ pageoptions_element_after_rules = ""
 pageoptions_element_extracted_words = ""
 ;
 ; PageoptionsElement.php line: 406
+pageoptions_element_extracted_questions = ""
+;
+; PageoptionsElement.php line: 411
 pageoptions_element_extracted_metas = ""
 ;
-; PageoptionsElement.php line: 423
+; PageoptionsElement.php line: 415
+pageoptions_element_page_process_times = ""
+;
+; PageoptionsElement.php line: 418
+pageoptions_element_page_process_time = ""
+;
+; PageoptionsElement.php line: 420
+pageoptions_element_rule_process_time = ""
+;
+; PageoptionsElement.php line: 421
+pageoptions_element_canon_time = ""
+;
+; PageoptionsElement.php line: 422
+pageoptions_element_maximal_time = ""
+;
+; PageoptionsElement.php line: 424
+pageoptions_element_qa_time = ""
+;
+; PageoptionsElement.php line: 425
+pageoptions_element_total_time = ""
+;
+; PageoptionsElement.php line: 430
+pageoptions_element_time_seconds = ""
+;
+; PageoptionsElement.php line: 448
 page_element_plugin_back = ""
 ;
-; PageoptionsElement.php line: 460
+; PageoptionsElement.php line: 485
 pageoptions_element_run_tests = ""
 ;
-; PageoptionsElement.php line: 464
+; PageoptionsElement.php line: 489
 pageoptions_element_save_options = ""
 ;
 ; ResultseditorElement.php line: 52
@@ -4901,34 +4928,37 @@ search_view_results = "結果"
 ; SearchView.php line: 230
 search_view_thesaurus_results = ""
 ;
-; SearchView.php line: 340
+; SearchView.php line: 342
+search_view_possible_answer = ""
+;
+; SearchView.php line: 351
 search_view_word_cloud = ""
 ;
-; SearchView.php line: 381
+; SearchView.php line: 392
 search_view_cache = ""
 ;
-; SearchView.php line: 383
+; SearchView.php line: 394
 search_view_as_text = ""
 ;
-; SearchView.php line: 394
+; SearchView.php line: 405
 search_view_similar = "相似"
 ;
-; SearchView.php line: 403
+; SearchView.php line: 414
 search_view_inlink = ""
 ;
-; SearchView.php line: 421
+; SearchView.php line: 432
 search_view_rank = "排名: %s 名"
 ;
-; SearchView.php line: 423
+; SearchView.php line: 434
 search_view_relevancy = "關聯度:  %s 趴"
 ;
-; SearchView.php line: 425
+; SearchView.php line: 436
 search_view_proximity = ""
 ;
-; SearchView.php line: 429
+; SearchView.php line: 440
 search_view_thesaurus_score = ""
 ;
-; SearchView.php line: 438
+; SearchView.php line: 449
 search_view_score = "分數"
 ;
 ; SettingsView.php line: 66
diff --git a/src/models/PhraseModel.php b/src/models/PhraseModel.php
index 3e89ad977..4aada09fe 100755
--- a/src/models/PhraseModel.php
+++ b/src/models/PhraseModel.php
@@ -38,7 +38,7 @@ use seekquarry\yioop\library\IndexManager;
 use seekquarry\yioop\library\PhraseParser;
 use seekquarry\yioop\library\Thesaurus;
 use seekquarry\yioop\library\index_bundle_iterators as I;
-use seekquarry\yioop\library\TripletExtractor;
+use seekquarry\yioop\library\QuestionAnswerExtractor;

 /**
  * logging is done during crawl not through web,
@@ -400,17 +400,15 @@ class PhraseModel extends ParallelModel
                         if (isset($out_results['PAGES'][$out_count])) {
                             $results['PAGES'][$i] =
                                 $out_results['PAGES'][$out_count];
-
                             if (isset($out_results['PAGES'][$out_count]
                                 [self::QUESTION_TRIPLETS])) {
-                                $triplets_with_answer =
+                                $triplets_with_answer =
                                     $out_results['PAGES'][$out_count]
-                                        [self::QUESTION_TRIPLETS];
+                                    [self::QUESTION_TRIPLETS];
                                 $question = trim($phrase);
-
                                 if (isset($triplets_with_answer[$question])) {
-                                   $out_results['PAGES'][$out_count]['ANSWER']
-                                        = $triplets_with_answer[$question];
+                                    $out_results['PAGES'][$out_count]['ANSWER']=
+                                        $triplets_with_answer[$question];
                                 }
                             }
                             $results['PAGES'][$i] =
@@ -904,45 +902,31 @@ class PhraseModel extends ParallelModel
             }
             $phrase = $letter." ".$phrase."|".$phrase;
         }
-        $tokenizer_name = C\NS_LOCALE . "$tag\\resources\\" .
-            ucfirst($main_tag) . "Tokenizer";
+        $tag = str_replace("-", "_", $tag);
+        $tokenizer_name = C\NS_LOCALE . "$tag\\resources\\Tokenizer";
         if (class_exists($tokenizer_name)) {
-            $tmp_object = new $tokenizer_name();
-            if (isset($tmp_object->semantic_rewrites)) {
-                $rewrites = $tmp_object->semantic_rewrites;
+            $tokenizer = new $tokenizer_name();
+            if (isset($tokenizer->semantic_rewrites)) {
+                $rewrites = $tokenizer->semantic_rewrites;
                 $tmp = trim($phrase);
                 if (isset($rewrites[$tmp])) {
                     $phrase = $rewrites[$tmp];
                 }
             }
         }
-        if ($this->isQuestion($phrase)) {
-            $generated_question = TripletExtractor::questionParser(trim($phrase));
-            if(isset($generated_question['FEATURED'])){
-                $phrase = $generated_question['FEATURED']['1'];
-            }else if(isset($generated_question['RAW'])){
-                $phrase = $generated_question['RAW']['1'];
+        if (!empty($tokenizer) && method_exists($tokenizer, "isQuestion") &&
+            method_exists($tokenizer, "tagTokenizePartOfSpeech") &&
+            $tokenizer->isQuestion($phrase)) {
+            $generated_question = QuestionAnswerExtractor::questionParser(
+                $phrase, $tag);
+            if (!empty($generated_question['CONCISE'])) {
+                $phrase = $generated_question['CONCISE'][0];
+            } else if (!empty($generated_question['RAW'])) {
+                $phrase = $generated_question['RAW'][0];
             }
         }
         return $phrase;
     }
-
-    /**
-     * Takes a phrase query entered by user and return true if it is question
-     * and false if not
-     *
-     * @param $phrase any statement
-     * @return bool returns true if statement is question
-     */
-    public function isQuestion($phrase)
-    {
-        $regex_starts_with_que = "/^(who|what|which|where|when|whose|whome|how)(.*)$/";
-        $regex_ends_with_que = "/^(.*)\?$/"; // Not in use
-        if (preg_match($regex_starts_with_que, trim($phrase))) {
-            return true;
-        }
-        return false;
-    }
     /**
      * Matches terms (non white-char strings) in the language $lang_tag in
      * $phrase that begin with  $start_with and don't contain  $not_contain,
diff --git a/src/privacy.php b/src/privacy.php
index c18aebab5..491ce7ceb 100755
--- a/src/privacy.php
+++ b/src/privacy.php
@@ -32,7 +32,7 @@
  * @filesource
  */
 namespace seekquarry\yioop;
-
+
 /* set-up static privacy page for display */
 $_REQUEST['c'] = "static";
 $_REQUEST['p'] = "privacy";
diff --git a/src/views/SearchView.php b/src/views/SearchView.php
index 2ef339f4f..29a83077b 100755
--- a/src/views/SearchView.php
+++ b/src/views/SearchView.php
@@ -336,18 +336,14 @@ class SearchView extends View implements CrawlConstants
                     UrlParser::simplifyUrl($url, 40)." "
                 ?></span>
                 <?php
-                if(isset($page['ANSWER'])){
-                    $answer = $page['ANSWER'];
-                ?>
-                <span class="echo-link" <?=$subtitle ?>>
+                if (isset($page['ANSWER'])) {
+                    $answer = $page['ANSWER'];?>
+                    <span class="echo-link" <?=$subtitle ?>>
                     <?php e("<span class='word-cloud-spacer'>".
-                    "Possible Answer:"."</span>");?>
+                    tl('search_view_possible_answer')."</span>"); ?>
                     <?=$answer." "?>
-                </span>
-                <?php
-                    }
-                ?>
-                <?php
+                    </span><?php
+                }
                 $cloud = $page[self::WORD_CLOUD];
                 ?>
                 <?php
diff --git a/src/views/elements/PageoptionsElement.php b/src/views/elements/PageoptionsElement.php
index 3acfd4c65..64531afba 100644
--- a/src/views/elements/PageoptionsElement.php
+++ b/src/views/elements/PageoptionsElement.php
@@ -411,8 +411,28 @@ class PageOptionsElement extends Element
             if (isset($data["EXTRACTED_META_WORDS"])) {
                 e("<h3>".tl('pageoptions_element_extracted_metas')."</h3>");
                 e("<pre>\n{$data['EXTRACTED_META_WORDS']}\n</pre>");
-            } ?>
-        <?php
+            }
+            if (isset($data["PROCESS_TIMES"])) {
+                e("<h3>".tl('pageoptions_element_page_process_times')."</h3>");
+                $timing_translations = [
+                    'PAGE_PROCESS' =>
+                        tl('pageoptions_element_page_process_time'),
+                    'RULE_PROCESS' =>
+                        tl('pageoptions_element_rule_process_time'),
+                    'CANONICALIZE' => tl('pageoptions_element_canon_time'),
+                    'MAXIMAL_TERMS' => tl('pageoptions_element_maximal_time'),
+                    'QUESTION_ANSWER_EXTRACT' =>
+                        tl('pageoptions_element_qa_time'),
+                    'TOTAL' => tl('pageoptions_element_total_time'),
+                    ];
+                e("<table>");
+                foreach ($timing_translations as $timing => $translation) {
+                    e("<tr><th>$translation</th><td>" .
+                        tl('pageoptions_element_time_seconds',
+                        $data["PROCESS_TIMES"][$timing]) . "</td></tr>");
+                }
+                e("<table>");
+            }
         } ?>
         </div>
         </div>
ViewGit