diff --git a/docs/0.9.4/udf.html b/docs/0.9.4/udf.html
index 83f7114..65bc7bb 100644
--- a/docs/0.9.4/udf.html
+++ b/docs/0.9.4/udf.html
@@ -1,15 +1,15 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/markdown/udf.md at 2018-10-02
+ | Generated by Apache Maven Doxia Site Renderer 1.8.1 from target/generated-site/markdown/udf.md at 2018-10-12
  | Rendered using Apache Maven Fluido Skin 1.7
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181002" />
+    <meta name="Date-Revision-yyyymmdd" content="20181012" />
     <meta http-equiv="Content-Language" content="en" />
-    <title>AsterixDB &#x2013; Support for User Defined Functions in AsterixDB</title>
+    <title>AsterixDB &#x2013; User-defined Functions</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
@@ -26,7 +26,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-10-02</li>
+        <li id="publishDate">Last Published: 2018-10-12</li>
       <li id="projectVersion" class="pull-right">Version: 0.9.4</li>
       <li class="pull-right"><a href="index.html" title="Documentation Home">Documentation Home</a></li>
         </ul>
@@ -40,26 +40,26 @@
     <li><a href="ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li>
     <li><a href="aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li>
       <li class="nav-header">AsterixDB Primer</li>
-    <li><a href="sqlpp/primer-sqlpp.html" title="Option 1: using SQL++"><span class="none"></span>Option 1: using SQL++</a></li>
-    <li><a href="aql/primer.html" title="Option 2: using AQL"><span class="none"></span>Option 2: using AQL</a></li>
+    <li><a href="sqlpp/primer-sqlpp.html" title="Using SQL++"><span class="none"></span>Using SQL++</a></li>
       <li class="nav-header">Data Model</li>
     <li><a href="datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li>
-      <li class="nav-header">Queries - SQL++</li>
+      <li class="nav-header">Queries</li>
     <li><a href="sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li>
     <li><a href="sqlpp/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li>
-      <li class="nav-header">Queries - AQL</li>
-    <li><a href="aql/manual.html" title="The Asterix Query Language (AQL)"><span class="none"></span>The Asterix Query Language (AQL)</a></li>
-    <li><a href="aql/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li>
       <li class="nav-header">API/SDK</li>
     <li><a href="api.html" title="HTTP API"><span class="none"></span>HTTP API</a></li>
     <li><a href="csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li>
       <li class="nav-header">Advanced Features</li>
-    <li><a href="aql/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li>
     <li><a href="aql/externaldata.html" title="Accessing External Data"><span class="none"></span>Accessing External Data</a></li>
-    <li><a href="feeds/tutorial.html" title="Support for Data Ingestion"><span class="none"></span>Support for Data Ingestion</a></li>
+    <li><a href="feeds.html" title="Data Ingestion with Feeds"><span class="none"></span>Data Ingestion with Feeds</a></li>
     <li class="active"><a href="#"><span class="none"></span>User Defined Functions</a></li>
-    <li><a href="aql/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li>
-    <li><a href="aql/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li>
+    <li><a href="sqlpp/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li>
+    <li><a href="sqlpp/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li>
+    <li><a href="sqlpp/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li>
+      <li class="nav-header">Deprecated</li>
+    <li><a href="aql/primer.html" title="AsterixDB Primer: Using AQL"><span class="none"></span>AsterixDB Primer: Using AQL</a></li>
+    <li><a href="aql/manual.html" title="Queries: The Asterix Query Language (AQL)"><span class="none"></span>Queries: The Asterix Query Language (AQL)</a></li>
+    <li><a href="aql/builtins.html" title="Queries: Builtin Functions (AQL)"><span class="none"></span>Queries: Builtin Functions (AQL)</a></li>
 </ul>
           <hr />
           <div id="poweredBy">
@@ -90,160 +90,173 @@
  ! specific language governing permissions and limitations
  ! under the License.
  !-->
-<h1>Support for User Defined Functions in AsterixDB</h1>
+<h1>User-defined Functions</h1>
 <div class="section">
 <h2><a name="Table_of_Contents"></a><a name="atoc" id="#toc">Table of Contents</a></h2>
 <ul>
 
-<li><a href="#PreprocessingCollectedData">Using UDF to preprocess feed-collected data</a></li>
-<li><a href="#WritingAnExternalUDF">Writing an External UDF</a></li>
-<li><a href="#CreatingAnAsterixDBLibrary">Creating an AsterixDB Library</a></li>
-<li><a href="#installingUDF">Installing an AsterixDB Library</a></li>
-</ul>
-<p>In this document, we describe the support for implementing, using, and installing user-defined functions (UDF) in AsterixDB. We will explain how we can use UDFs to preprocess, e.g., data collected using feeds (see the <a href="feeds/tutorial.html">feeds tutorial</a>).</p>
+<li><a href="#introduction">Introduction</a></li>
+<li><a href="#installingUDF">Installing an UDF Library</a></li>
+<li><a href="#UDFOnFeeds">Attaching an UDF on Data Feeds</a></li>
+<li><a href="#udfConfiguration">A quick look of the UDF configuration</a></li>
+<li><a href="#uninstall">Unstalling an UDF Library</a><!--
+! Licensed to the Apache Software Foundation (ASF) under one
+! or more contributor license agreements.  See the NOTICE file
+! distributed with this work for additional information
+! regarding copyright ownership.  The ASF licenses this file
+! to you under the Apache License, Version 2.0 (the
+! "License"); you may not use this file except in compliance
+! with the License.  You may obtain a copy of the License at
+!
+!   http://www.apache.org/licenses/LICENSE-2.0
+!
+! Unless required by applicable law or agreed to in writing,
+! software distributed under the License is distributed on an
+! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+! KIND, either express or implied.  See the License for the
+! specific language governing permissions and limitations
+! under the License.
+!--></li>
+</ul></div>
 <div class="section">
-<h3><a name="Installing_an_AsterixDB_Library"></a><a name="installingUDF">Installing an AsterixDB Library</a></h3>
-<p>We assume you have followed the <a href="../install.html">installation instructions</a> to set up a running AsterixDB instance. Let us refer your AsterixDB instance by the name &#x201c;my_asterix&#x201d;.</p>
+<h2><a name="Introduction"></a><a name="introduction">Introduction</a></h2>
+<p>Apache AsterixDB supports two languages for writing user-defined functions (UDFs): SQL++ and Java. A user can encapsulate data processing logic into a UDF and invoke it later repeatedly. For SQL++ functions, a user can refer to <a href="sqlpp/manual.html#Functions">SQL++ Functions</a> for their usages. In this document, we focus on how to install/invoke/uninstall a Java function library using the Ansible script that we provide.</p></div>
+<div class="section">
+<h2><a name="Installing_an_UDF_Library"></a><a name="installingUDF">Installing an UDF Library</a></h2>
+<p>UDFs have to be installed offline. This section describes the process assuming that you have followed the preceding <a href="ansible.html">ansible installation instructions</a> to deploy an AsterixDB instance on your local machine or cluster. Here are the instructions to install an UDF library:</p>
 <ul>
 
 <li>
 
-<p>Step 1: Stop the AsterixDB instance if it is in the ACTIVE state.</p>
+<p>Step 1: Stop the AsterixDB instance if it is ACTIVE.</p>
 
 <div>
 <div>
-<pre class="source">$ managix stop -n my_asterix
+<pre class="source">$ bin/stop.sh
 </pre></div></div>
 </li>
 <li>
 
-<p>Step 2: Install the library using Managix install command. Just to illustrate, we use the help command to look up the syntax</p>
+<p>Step 2: Deploy the UDF package.</p>
 
 <div>
 <div>
-<pre class="source">$ managix help  -cmd install
-Installs a library to an asterix instance.
-Options
-n  Name of Asterix Instance
-d  Name of the dataverse under which the library will be installed
-l  Name of the library
-p  Path to library zip bundle
+<pre class="source">$ bin/udf.sh -m i -d DATAVERSE_NAME -l LIBRARY_NAME -p UDF_PACKAGE_PATH
+</pre></div></div>
+</li>
+<li>
+
+<p>Step 3: Start AsterixDB</p>
+
+<div>
+<div>
+<pre class="source">$ bin/start.sh
 </pre></div></div>
 </li>
 </ul>
-<p>Above is a sample output and explains the usage and the required parameters. Each library has a name and is installed under a dataverse. Recall that we had created a dataverse by the name - &#x201c;feeds&#x201d; prior to  creating our datatypes and dataset. We shall name our library - &#x201c;testlib&#x201d;.</p>
-<p>We assume you have a library zip bundle that needs to be installed. To install the library, use the Managix install command. An example is shown below.</p>
+<p>After AsterixDB starts, you can use the following query to check whether your UDFs have been sucessfully registered with the system.</p>
 
 <div>
 <div>
-<pre class="source">    $ managix install -n my_asterix -d feeds -l testlib -p extlibs/asterix-external-data-0.8.7-binary-assembly.zip
+<pre class="source">    SELECT * FROM Metadata.`Function`;
 </pre></div></div>
 
-<p>You should see the following message:</p>
+<p>In the AsterixDB source release, we provide several sample UDFs that you can try out. You need to build the AsterixDB source to get the compiled UDF package. It can be found under the <tt>asterixdb-external</tt> sub-project. Assuming that these UDFs have been installed into the <tt>udfs</tt> dataverse and <tt>testlib</tt> library, here is an example that uses the sample UDF <tt>mysum</tt> to compute the sum of two input integers.</p>
 
 <div>
 <div>
-<pre class="source">    INFO: Installed library testlib
+<pre class="source">    use udfs;
+
+    testlib#mysum(3,4);
 </pre></div></div>
-
-<p>We shall next start our AsterixDB instance using the start command as shown below.</p>
-
-<div>
-<div>
-<pre class="source">    $ managix start -n my_asterix
-</pre></div></div>
-
-<p>You may now use the AsterixDB library in AQL statements and queries. To look at the installed artifacts, you may execute the following query at the AsterixDB web-console.</p>
-
-<div>
-<div>
-<pre class="source">    for $x in dataset Metadata.Function
-    return $x
-
-    for $x in dataset Metadata.Library
-    return $x
-</pre></div></div>
-
-<p>Our library is now installed and is ready to be used.</p></div></div>
+</div>
 <div class="section">
-<h2><a name="Preprocessing_Collected_Data"></a><a name="PreprocessingCollectedData" id="PreprocessingCollectedData">Preprocessing Collected Data</a></h2>
-<p>In the following we assume that you already created the <tt>TwitterFeed</tt> and its corresponding data types and dataset following the instruction explained in the <a href="feeds/tutorial.html">feeds tutorial</a>.</p>
-<p>A feed definition may optionally include the specification of a user-defined function that is to be applied to each feed object prior to persistence. Examples of pre-processing might include adding attributes, filtering out objects, sampling, sentiment analysis, feature extraction, etc. We can express a UDF, which can be defined in AQL or in a programming language such as Java, to perform such pre-processing. An AQL UDF is a good fit when pre-processing a object requires the result of a query (join or aggregate) over data contained in AsterixDB datasets. More sophisticated processing such as sentiment analysis of text is better handled by providing a Java UDF. A Java UDF has an initialization phase that allows the UDF to access any resources it may need to initialize itself prior to being used in a data flow. It is assumed by the AsterixDB compiler to be stateless and thus usable as an embarrassingly parallel black box. In contrast, the AsterixDB compiler can reason about an AQL UDF and involve the use of indexes during its invocation.</p>
-<p>We consider an example transformation of a raw tweet into its lightweight version called <tt>ProcessedTweet</tt>, which is defined next.</p>
+<h2><a name="Attaching_a_UDF_on_Data_Feeds"></a><a name="UDFOnFeeds" id="UDFOnFeeds">Attaching a UDF on Data Feeds</a></h2>
+<p>In <a href="feeds.html">Data Ingestion using feeds</a>, we introduced an efficient way for users to get data into AsterixDB. In some use cases, users may want to pre-process the incoming data before storing it into the dataset. To meet this need, AsterixDB allows the user to attach a UDF onto the ingestion pipeline. Following the example in <a href="feeds.html">Data Ingestion</a>, here we show an example of how to attach a UDF that extracts the user names mentioned from the incoming Tweet text, storing the processed Tweets into a dataset.</p>
+<p>We start by creating the datatype and dataset that will be used for the feed and UDF. One thing to keep in mind is that data flows from the feed to the UDF and then to the dataset. This means that the feed&#x2019;s datatype should be the same as the input type of the UDF, and the output datatype of the UDF should be the same as the dataset&#x2019;s datatype. Thus, users should make sure that their datatypes are consistent in the UDF configuration. Users can also take advantage of open datatypes in AsterixDB by creating a minimum description of the data for simplicity. Here we use open datatypes:</p>
 
 <div>
 <div>
-<pre class="source">    use dataverse feeds;
+<pre class="source">    use udfs;
 
-    create type ProcessedTweet if not exists as open {
-        id: string,
-        user_name:string,
-        location:point,
-        created_at:string,
-        message_text:string,
-        country: string,
-        topics: {{string}}
+    create type TweetType if not exists as open {
+        id: int64
     };
 
-    create dataset ProcessedTweets(ProcessedTweet)
-    primary key id;
+    create dataset ProcessedTweets(TweetType) primary key id;
 </pre></div></div>
 
-<p>The processing required in transforming a collected tweet to its lighter version of type <tt>ProcessedTweet</tt> involves extracting the topics or hash-tags (if any) in a tweet and collecting them in the referred &#x201c;topics&#x201d; attribute for the tweet. Additionally, the latitude and longitude values (doubles) are combined into the spatial point type. Note that spatial data types are considered as first-class citizens that come with the support for creating indexes. Next we show a revised version of our example TwitterFeed that involves the use of a UDF. We assume that the UDF that contains the transformation logic into a &#x201c;ProcessedTweet&#x201d; is available as a Java UDF inside an AsterixDB library named &#x2018;testlib&#x2019;. We defer the writing of a Java UDF and its installation as part of an AsterixDB library to a later section of this document.</p>
+<p>As the <tt>TweetType</tt> is an open datatype, processed Tweets can be stored into the dataset after they are annotated with an extra attribute. Given the datatype and dataset above, we can create a Twitter Feed with the same datatype. Please refer to section <a href="feeds.html">Data Ingestion</a> if you have any trouble in creating feeds.</p>
 
 <div>
 <div>
-<pre class="source">    use dataverse feeds;
+<pre class="source">    use udfs;
 
-    create feed ProcessedTwitterFeed if not exists
-    using &quot;push_twitter&quot;
-    ((&quot;type-name&quot;=&quot;Tweet&quot;),
-    (&quot;consumer.key&quot;=&quot;************&quot;),
-    (&quot;consumer.secret&quot;=&quot;**************&quot;),
-    (&quot;access.token&quot;=&quot;**********&quot;),
-    (&quot;access.token.secret&quot;=&quot;*************&quot;))
-
-    apply function testlib#addHashTagsInPlace;
+    create feed TwitterFeed with {
+      &quot;adapter-name&quot;: &quot;push_twitter&quot;,
+      &quot;type-name&quot;: &quot;TweetType&quot;,
+      &quot;format&quot;: &quot;twitter-status&quot;,
+      &quot;consumer.key&quot;: &quot;************&quot;,
+      &quot;consumer.secret&quot;: &quot;************&quot;,
+      &quot;access.token&quot;: &quot;**********&quot;,
+      &quot;access.token.secret&quot;: &quot;*************&quot;
+    };
 </pre></div></div>
 
-<p>Note that a feed adaptor and a UDF act as pluggable components. These contribute towards providing a generic &#x201c;plug-and-play&#x201d; model where custom implementations can be provided to cater to specific requirements.</p>
+<p>After creating the feed, we attach the UDF onto the feed pipeline and start the feed with following statements:</p>
+
+<div>
+<div>
+<pre class="source">    use udfs;
+
+    connect feed TwitterFeed to dataset ProcessedTweets apply function udfs#addMentionedUsers;
+
+    start feed TwitterFeed;
+</pre></div></div>
+
+<p>You can check the annotated Tweets by querying the <tt>ProcessedTweets</tt> dataset:</p>
+
+<div>
+<div>
+<pre class="source">    SELECT * FROM ProcessedTweets LIMIT 10;
+</pre></div></div>
+</div>
 <div class="section">
-<div class="section">
-<h4><a name="Building_a_Cascade_Network_of_Feeds"></a>Building a Cascade Network of Feeds</h4>
-<p>Multiple high-level applications may wish to consume the data ingested from a data feed. Each such application might perceive the feed in a different way and require the arriving data to be processed and/or persisted differently. Building a separate flow of data from the external source for each application is wasteful of resources as the pre-processing or transformations required by each application might overlap and could be done together in an incremental fashion to avoid redundancy. A single flow of data from the external source could provide data for multiple applications. To achieve this, we introduce the notion of primary and secondary feeds in AsterixDB.</p>
-<p>A feed in AsterixDB is considered to be a primary feed if it gets its data from an external data source. The objects contained in a feed (subsequent to any pre-processing) are directed to a designated AsterixDB dataset. Alternatively or additionally, these objects can be used to derive other feeds known as secondary feeds. A secondary feed is similar to its parent feed in every other aspect; it can have an associated UDF to allow for any subsequent processing, can be persisted into a dataset, and/or can be made to derive other secondary feeds to form a cascade network. A primary feed and a dependent secondary feed form a hierarchy. As an example, we next show an example AQL statement that redefines the previous feed &#x201c;ProcessedTwitterFeed&#x201d; in terms of their respective parent feed (TwitterFeed).</p>
+<h2><a name="A_quick_look_of_the_UDF_configuration"></a><a name="udfConfiguration">A quick look of the UDF configuration</a></h2>
+<p>AsterixDB uses an XML configuration file to describe the UDFs. A user can use it to define and reuse their compiled UDFs for different purposes. Here is a snippet of the configuration used in our <a href="#UDFOnFeeds">previous example</a>:</p>
 
 <div>
 <div>
-<pre class="source">    use dataverse feeds;
-
-    drop feed ProcessedTwitterFeed if exists;
-
-    create secondary feed ProcessedTwitterFeed from feed TwitterFeed
-    apply function testlib#addHashTags;
-
-    connect feed ProcessedTwitterFeed to dataset ProcessedTweets;
+<pre class="source">    &lt;libraryFunction&gt;
+      &lt;name&gt;addMentionedUsers&lt;/name&gt;
+      &lt;function_type&gt;SCALAR&lt;/function_type&gt;
+      &lt;argument_type&gt;TweetType&lt;/argument_type&gt;
+      &lt;return_type&gt;TweetType&lt;/return_type&gt;
+      &lt;definition&gt;org.apache.asterix.external.library.AddMentionedUsersFactory&lt;/definition&gt;
+      &lt;parameters&gt;text&lt;/parameters&gt;
+    &lt;/libraryFunction&gt;
 </pre></div></div>
 
-<p>The <tt>addHashTags</tt> function is already provided in the example UDF.To see what objects are being inserted into the dataset, we can perform a simple dataset scan after allowing a few moments for the feed to start ingesting data:</p>
+<p>Here are the explanations of the fields in the configuration file:</p>
 
 <div>
 <div>
-<pre class="source">    use dataverse feeds;
-
-    for $i in dataset ProcessedTweets limit 10 return $i;
+<pre class="source">   name: The proper name that is used for invoke the function.
+   function_type: The type of the function.
+   argument_type: The datatype of the arguments passed in. If there is more than one parameter, separate them with comma(s), e.g., `AINT32,AINT32`.
+   return_type: The datatype of the returning value.
+   definition: A reference to the function factory.
+   parameters: The parameters passed into the function.
 </pre></div></div>
 
-<p>For an example of how to write a Java UDF from scratch, the source for the example UDF that has been used in this tutorial is available [here] (<a class="externalLink" href="https://github.com/apache/asterixdb/tree/master/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library">https://github.com/apache/asterixdb/tree/master/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library</a>)</p></div></div></div>
+<p>In our feeds example, we passed in <tt>&quot;text&quot;</tt> as a parameter to the function so it knows which field to look at to get the Tweet text. If the Twitter API were to change its field names in the future, we can accommodate that change by simply modifying the configuration file instead of recompiling the whole UDF package. This feature can be further utilized in use cases where a user has a Machine Learning algorithm with different trained model files. If you are interested, You can find more examples <a class="externalLink" href="https://github.com/apache/asterixdb/tree/master/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/library">here</a></p></div>
 <div class="section">
-<h2><a name="Unstalling_an_AsterixDB_Library"></a><a name="installingUDF">Unstalling an AsterixDB Library</a></h2>
-<p>To uninstall a library, use the Managix uninstall command as follows:</p>
+<h2><a name="Unstalling_an_UDF_Library"></a><a name="uninstall">Unstalling an UDF Library</a></h2>
+<p>If you want to uninstall the UDF library, put AsterixDB into <tt>INACTVIVE</tt> mode and run following command:</p>
 
 <div>
 <div>
-<pre class="source">    $ managix stop -n my_asterix
-
-    $ managix uninstall -n my_asterix -d feeds -l testlib
+<pre class="source">    $ bin/udf.sh -m u -d DATAVERSE_NAME -l LIBRARY_NAME
 </pre></div></div></div>
         </div>
       </div>
