Merge remote-tracking branch 'origin/livedoc' into develop
diff --git a/.travis.yml b/.travis.yml
index a35c3e7..a2cc237 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,67 +1,42 @@
-##########
-# This is .travis.yml configuration file specifically for master and develop branch.
-# The travis job should contains only unit and integration tests.
-#
-# To avoid this file from being overwritten by .travis.yml from other branches,
-# please add the following to your local git config:
-#   git config merge.ours.driver true
-##########
-
 branches:
   only:
     - master
-    - develop
+    - livedoc
 
-language: scala
+language: ruby
+rvm:
+  - 2.2.0
 
-addons:
-    postgresql: "9.3"
-
-sudo: false
-
-env:
-  global:
-    - PIO_HOME=`pwd`
-
-before_script:
-# Download spark, hbase
-  - mkdir vendors
-  - wget http://d3kbcqa49mib13.cloudfront.net/spark-1.3.0-bin-hadoop2.4.tgz
-  - tar zxfC spark-1.3.0-bin-hadoop2.4.tgz vendors
-  - wget http://archive.apache.org/dist/hbase/hbase-1.0.0/hbase-1.0.0-bin.tar.gz
-  - tar zxfC hbase-1.0.0-bin.tar.gz vendors
-
-# Prepare pio environment variables
-  - set -a
-  - source conf/pio-env.sh.travis
-  - set +a
-
-# Create postgres database for PredictionIO
-  - psql -c 'create database predictionio;' -U postgres
-  - ./bin/travis/pio-start-travis
+gemfile: docs/manual/Gemfile
 
 script:
-# Run stylecheck
-  - sbt scalastyle
-
-# Run all unit tests
-  - sbt test
-
-after_script:
-  - ./bin/travis/pio-stop-travis
-
+  - cd docs/manual
+  - bundle exec middleman build
 deploy:
   - provider: s3
     access_key_id:
       secure: "PxUW6LxwsJ2UlakxsPtkgIwbE949QyJbDF31IdjDIVX5H7KLWA0xkpECj+DXW7/lODsuGLxi02w4Y+KE0Ujo27ovnQAu2F1D6NDGn+D/JIu/wqjRJ4OOOg65j/06zyj5jzWMckLh6wYKABMiInsWiXtr4ehLS6pHVyJVXaLuBPE="
     secret_access_key:
       secure: "L3TXxQJZutXrXROf89dTiMuvcnsQ88F+cSqpddhafy4O3agyTMyJcHozizCaKI+VuJVZnUrip/joo4b85PSC8xjU4G7/lOIAoiSyQZU/f4RqUTFyl9ppTHQq2CyZKZy1qhqmBegRcWTy6TLV3JNXzKq+0fgl6/HekUMBuNX98yM="
+    bucket: docs.prediction.io
+    region: us-east-1
+    skip_cleanup: true
+    endpoint: docs.prediction.io.s3-website-us-east-1.amazonaws.com
+    local-dir: build
+    detect_encoding: true
+    on:
+      branch: livedoc
+  - provider: s3
+    access_key_id:
+      secure: "PxUW6LxwsJ2UlakxsPtkgIwbE949QyJbDF31IdjDIVX5H7KLWA0xkpECj+DXW7/lODsuGLxi02w4Y+KE0Ujo27ovnQAu2F1D6NDGn+D/JIu/wqjRJ4OOOg65j/06zyj5jzWMckLh6wYKABMiInsWiXtr4ehLS6pHVyJVXaLuBPE="
+    secret_access_key:
+      secure: "L3TXxQJZutXrXROf89dTiMuvcnsQ88F+cSqpddhafy4O3agyTMyJcHozizCaKI+VuJVZnUrip/joo4b85PSC8xjU4G7/lOIAoiSyQZU/f4RqUTFyl9ppTHQq2CyZKZy1qhqmBegRcWTy6TLV3JNXzKq+0fgl6/HekUMBuNX98yM="
     bucket: install.prediction.io
     region: us-east-1
     skip_cleanup: true
     acl: public_read
     endpoint: install.prediction.io.s3-website-us-east-1.amazonaws.com
-    local-dir: bin
+    local-dir: ../../bin
     detect_encoding: true
     on:
       branch: master
diff --git a/docs/manual/source/datacollection/webhooks.html.md.erb b/docs/manual/source/datacollection/webhooks.html.md.erb
index 82b6498..df0f032 100644
--- a/docs/manual/source/datacollection/webhooks.html.md.erb
+++ b/docs/manual/source/datacollection/webhooks.html.md.erb
@@ -4,6 +4,7 @@
 
 Webhooks are used to collects data for your application from multiple channels automatically.
 
-PredictionIO offers webhooks for a number of services such as MailChimp, Magento, Shopify and KeenIO.
+PredictionIO offers webhooks for Segment.io and MailChimp (backend only). Several users also have expressed interest in 
+Magento, Shopify and KeenIO so we'd be happy to help if anyone wishes to implement these.
 
-Please contact us at <a href="mailto:&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#064;&#112;&#114;&#101;&#100;&#105;&#099;&#116;&#105;&#111;&#110;&#046;&#105;&#111;">&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#064;&#112;&#114;&#101;&#100;&#105;&#099;&#116;&#105;&#111;&#110;&#046;&#105;&#111;</a> if you are interested in trying out one of them.
\ No newline at end of file
+Please contact us at <a href="mailto:&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#064;&#112;&#114;&#101;&#100;&#105;&#099;&#116;&#105;&#111;&#110;&#046;&#105;&#111;">&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#064;&#112;&#114;&#101;&#100;&#105;&#099;&#116;&#105;&#111;&#110;&#046;&#105;&#111;</a> if you are interested in trying out one of them.
diff --git a/docs/manual/source/demo/tapster.html.md b/docs/manual/source/demo/tapster.html.md
index db62c88..31ceca5 100644
--- a/docs/manual/source/demo/tapster.html.md
+++ b/docs/manual/source/demo/tapster.html.md
@@ -8,8 +8,6 @@
 
 The demo will use [Similar Product Template](http://docs.prediction.io/templates/similarity/quickstart/). Similar Product Template is a great choice if you want to make recommendations based on immediate user activities or for new users with limited history. It uses MLLib Alternating Least Squares (ALS) recommendation algorithm, a [Collaborative filtering](http://en.wikipedia.org/wiki/Recommender_system#Collaborative_filtering) (CF) algorithm commonly used for recommender systems. These techniques aim to fill in the missing entries of a user-item association matrix. Users and products are described by a small set of latent factors that can be used to predict missing entries. A layman's interpretation of Collaborative Filtering is "People who like this comic, also like these comics."
 
-If you haven't already you can check out the final live demo here: [tapster.prediction.io](http://tapster.prediction.io/)
-
 All the code and data is on GitHub at: [github.com/PredictionIO/Demo-Tapster](https://github.com/PredictionIO/Demo-Tapster).
 
 ### Data
@@ -60,7 +58,7 @@
 
 This script is pretty simple. It loops through the CSV file and creates a new episode for each line in the file in our local database.
 
-You can start the app and point your browser to [http://locahost:3000](http://localhost.com/)
+You can start the app and point your browser to [http://localhost:3000](http://localhost.com/)
 
 ```
 $rails server
@@ -374,7 +372,6 @@
 
 ## Links
 Source code is on GitHub at: [github.com/PredictionIO/Demo-Tapster](https://github.com/PredictionIO/Demo-Tapster)
-Live demo is available at: [tapster.prediction.io](http://tapster.prediction.io)
 
 ## Conclusion
 
diff --git a/docs/manual/source/images/intellij/pio-runtime-jar-deps.png b/docs/manual/source/images/intellij/pio-runtime-jar-deps.png
new file mode 100644
index 0000000..84410ed
--- /dev/null
+++ b/docs/manual/source/images/intellij/pio-runtime-jar-deps.png
Binary files differ
diff --git a/docs/manual/source/images/intellij/pio-runtime-jars.png b/docs/manual/source/images/intellij/pio-runtime-jars.png
new file mode 100644
index 0000000..587bf04
--- /dev/null
+++ b/docs/manual/source/images/intellij/pio-runtime-jars.png
Binary files differ
diff --git a/docs/manual/source/partials/_footer.html.slim b/docs/manual/source/partials/_footer.html.slim
index 6d91e5d..3d9a528 100644
--- a/docs/manual/source/partials/_footer.html.slim
+++ b/docs/manual/source/partials/_footer.html.slim
@@ -1,4 +1,4 @@
-= partial 'action_call'
+
 
 footer
   .container
@@ -58,4 +58,4 @@
             a> href="//www.facebook.com/predictionio" target="blank"
               = image_tag 'icons/twitter.png', alt: 'PredictionIO on Twitter'
             a> href="//twitter.com/predictionio" target="blank"
-              = image_tag 'icons/facebook.png', alt: 'PredictionIO on Facebook'
\ No newline at end of file
+              = image_tag 'icons/facebook.png', alt: 'PredictionIO on Facebook'
diff --git a/docs/manual/source/partials/_func.html.slim b/docs/manual/source/partials/_func.html.slim
new file mode 100644
index 0000000..d2169d3
--- /dev/null
+++ b/docs/manual/source/partials/_func.html.slim
@@ -0,0 +1,4 @@
+- if build?
+  javascript:
+    function t(e){analytics.identify(e); analytics.track("newsletter signup");
+      rcx.track("newsletter signup", { '_email': e });}
diff --git a/docs/manual/source/partials/_rcx.html.slim b/docs/manual/source/partials/_rcx.html.slim
new file mode 100644
index 0000000..eaa7fdc
--- /dev/null
+++ b/docs/manual/source/partials/_rcx.html.slim
@@ -0,0 +1,6 @@
+- if build?
+  javascript:
+    (function(b,d,a){b.RCX_OBJECT=a;a=b[a]||[];if(!a.snipV&&!a.libV){b.rcx=a;a.snipV="0.2.0";var g=function(a,b,c,d){a[b]=a[b]||function(){c.push([d].concat(Array.prototype.slice.call(arguments)))}};b="init page track identify link setUserProperty unsetUserProperty".split(" ");for(var f=0;f<b.length;f++){var e,c;e=b[f];c=e.split(".");2==c.length?(a[c[0]]=a[c[0]]||[],g(a[c[0]],c[1],a,e)):g(a,e,a,e)}a=d.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof RCX_CUSTOM_LIB?
+    RCX_CUSTOM_LIB:"https://cdn.recontext.com/rcx.min.js";d=d.getElementsByTagName("script")[0];d.parentNode.insertBefore(a,d)}})(window,document,"rcx");
+    rcx.init("kTxFcI3IWdXYfRsh6uuYuej4qYl8m8LVMePM2hdIkM9YjHqkAFC6mqdqO9fpp8p9");
+    rcx.page();
diff --git a/docs/manual/source/partials/_segment.html.slim b/docs/manual/source/partials/_segment.html.slim
new file mode 100644
index 0000000..afe24ef
--- /dev/null
+++ b/docs/manual/source/partials/_segment.html.slim
@@ -0,0 +1,6 @@
+- if build?
+  javascript:
+    !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","group","track","ready","alias","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="3.0.1";
+      analytics.load("YlF3updaI3DR96hnNgSGpR3PPBUGDzt8");
+      analytics.page()
+      }}();
diff --git a/docs/manual/source/partials/_subscribe_form.html.slim b/docs/manual/source/partials/_subscribe_form.html.slim
index 77aa3ba..b2dd6b2 100644
--- a/docs/manual/source/partials/_subscribe_form.html.slim
+++ b/docs/manual/source/partials/_subscribe_form.html.slim
@@ -1,6 +1,6 @@
 .subscription-form-wrapper
   h4 Subscribe to our Newsletter
   form.ajax-form#subscribe-form method="POST" action="https://script.google.com/macros/s/AKfycbwhzeKCQJjQ52eVAqNT_vcklH07OITUO7wzOMDXvK6EGAWgaZgF/exec"
-    input.required.underlined-input type="email" placeholder="Your email address" name="subscription_email"
-    input.pill-button value="SUBSCRIBE" type="submit" data-state-normal="SUBSCRIBE" data-state-sucess="SUBSCRIBED!" data-state-loading="SENDING..."
-    p.result
\ No newline at end of file
+    input.required.underlined-input type="email" placeholder="Your email address" name="subscription_email" id="subscription_email"
+    input.pill-button value="SUBSCRIBE" type="submit" data-state-normal="SUBSCRIBE" data-state-sucess="SUBSCRIBED!" data-state-loading="SENDING..." onclick="t($('#subscription_email').val());"
+    p.result
diff --git a/docs/manual/source/partials/head/_javascripts.html.slim b/docs/manual/source/partials/head/_javascripts.html.slim
index d50b149..34554b6 100644
--- a/docs/manual/source/partials/head/_javascripts.html.slim
+++ b/docs/manual/source/partials/head/_javascripts.html.slim
@@ -2,8 +2,11 @@
   = javascript_include_tag '//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js'
 = javascript_include_tag '//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'
 = partial 'google_analytics'
+= partial 'segment'
+= partial 'rcx'
+= partial 'func'
 
-/azo sans font 
-= javascript_include_tag '//use.typekit.net/mut4mjx.js' 
+/azo sans font
+= javascript_include_tag '//use.typekit.net/mut4mjx.js'
 javascript:
-  try{Typekit.load();}catch(e){}
\ No newline at end of file
+  try{Typekit.load();}catch(e){}
diff --git a/docs/manual/source/resources/intellij.html.md.erb b/docs/manual/source/resources/intellij.html.md.erb
index e7a5e19..6c87443 100644
--- a/docs/manual/source/resources/intellij.html.md.erb
+++ b/docs/manual/source/resources/intellij.html.md.erb
@@ -73,9 +73,13 @@
 
 ### Dependencies
 
-Right click on the project and click *Open Module Settings*. Under *Modules*, go
-to the *Dependencies* tab on the right hand side, and click the **+** button to
-add the following two JARs:
+IntelliJ has the annoying tendency to drop some dependencies when you refresh your build.sbt after any changes. 
+To avoid this we put any jars that must be available at runtime into a separate empty module in the project then 
+we make the main engine project depend on this dummy module for runtime classes.
+
+Right click on the project and click *Open Module Settings*. In the second modules column hit **+** and create a
+new Scala module. Name it pio-runtime-jars and add these assemblies under the module dependencies tab and remember to
+change the scope of the jars to **runtime**:
 
 -   `pio-assembly-<%= data.versions.pio %>.jar`
 
@@ -87,8 +91,11 @@
     This JAR can be found inside the `assembly` or `lib` directory of your Apache Spark
     installation directory.
 
+![Create empty module and add dependencies](/images/intellij/pio-runtime-jar-deps.png)
 
-![Adding Dependencies](/images/intellij/intellij-dependencies.png)
+Now make your engine module dependent on the pio-runtime-jars module for scope = runtime.  
+
+![Create empty module and add dependencies](/images/intellij/pio-runtime-jars.png)
 
 
 ## Running and Debugging in IntelliJ IDEA
diff --git a/docs/manual/source/sdk/community.html.md b/docs/manual/source/sdk/community.html.md
index 72c955a..72ba0d5 100644
--- a/docs/manual/source/sdk/community.html.md
+++ b/docs/manual/source/sdk/community.html.md
@@ -30,6 +30,17 @@
 - Status: It works with PredictionIO v0.8 - Under active development
 
 
+## .NET SDK for PredictionIO
+
+URL: https://github.com/ibrahimozgon/PredictionIO-.Net-SDK
+
+.NET SDK for PredictionIO
+
+- Core Author: Ibrahim Özgön
+
+- Status: It works with PredictionIO v0.9 - Under active development
+
+
 ## Lavarel Wrapper for PredictionIO
 
 URL: https://github.com/michael-hopkins/PredictionIO-Laravel-Wrapper and https://packagist.org/packages/hopkins/predictionio-laravel-wrapper
diff --git a/docs/manual/source/stylesheets/partials/_subscribe_form.css.scss b/docs/manual/source/stylesheets/partials/_subscribe_form.css.scss
index 1a99cca..ad05515 100644
--- a/docs/manual/source/stylesheets/partials/_subscribe_form.css.scss
+++ b/docs/manual/source/stylesheets/partials/_subscribe_form.css.scss
@@ -1,11 +1,11 @@
 .subscription-form-wrapper {
-  background-color: $white;
+  background-color: $form-wrapper-color;
   border: 1px solid $form-wrapper-border-color;
   padding: 25px 20px;
 
   h4 {
     font-size: 18px;
-    color: $footer-heading-4-color;
+    color: $form-wrapper-heading-4-color;
     font-weight: normal;
   }
 
@@ -50,6 +50,11 @@
 
   input[type="email"] {
     width: 100%;
+    padding-left: 12px;
+  	padding-right: 12px;
+  	border-radius: 5px;
+  	font-size: 14px;
+  	line-height: 26px;
   }
 
   input:focus:invalid, input:invalid {
@@ -69,4 +74,4 @@
   }
 
   @include placeholder-color ($subscribe-form-placeholder-color);
-}
\ No newline at end of file
+}
diff --git a/docs/manual/source/stylesheets/variables/_colors.css.scss b/docs/manual/source/stylesheets/variables/_colors.css.scss
index ef6020d..96a7af9 100644
--- a/docs/manual/source/stylesheets/variables/_colors.css.scss
+++ b/docs/manual/source/stylesheets/variables/_colors.css.scss
@@ -13,7 +13,7 @@
 $off-canvas-background-color: #ffffff;
 $main-background-color: #ffffff;
 
-// Header 
+// Header
 $header-border-bottom-color: #249DEC;
 $header-left-pill-background-color: #249DEC;
 $header-right-pill-background-color: #72D6FF;
@@ -98,13 +98,15 @@
 $footer-bottom-background-color: #262626;
 
 // Subscribe Form
+$form-wrapper-color: #091F38;
 $form-wrapper-border-color: #ccc;
+$form-wrapper-heading-4-color: #E5E5E5;
 $subscribe-form-pill-button-background-color: #2499E6;
 $disabled-pill-button-background-color: #ccc;
 $invalid-input-border-color: #ffd654;
 $valid-input-border-color: #EBF1F9;
 $errored-input-border-color: #a94442;
-$subscribe-form-placeholder-color: #e5e5e5;
+$subscribe-form-placeholder-color: #BCBCBC;
 
 // Copyright
 $copyright-font-color: #828385;
diff --git a/docs/manual/source/support/index.html.md.erb b/docs/manual/source/support/index.html.md.erb
index f63375a..6520873 100644
--- a/docs/manual/source/support/index.html.md.erb
+++ b/docs/manual/source/support/index.html.md.erb
@@ -18,8 +18,7 @@
 
 ## Enterprise Support
 
-For enterprise users who require professional support, you may contact us::
+For enterprise users who require professional support, you may contact us:
 
 * [PredictionIO Enterprise Support and Services](http://prediction.io/enterprise)
-* <a href="mailto:&#101;&#110;&#116;&#101;&#114;&#112;&#114;&#105;&#115;&#101;&#064;&#112;&#114;&#101;&#100;&#105;&#099;&#116;&#105;&#111;&#110;&#046;&#105;&#111;">&#101;&#110;&#116;&#101;&#114;&#112;&#114;&#105;&#115;&#101;&#064;&#112;&#114;&#101;&#100;&#105;&#099;&#116;&#105;&#111;&#110;&#046;&#105;&#111;</a>
-
+* <a href="mailto:&#x63;&#x6F;&#x6E;&#x74;&#x61;&#x63;&#x74;&#x40;&#x61;&#x63;&#x74;&#x69;&#x6F;&#x6E;&#x6D;&#x6C;&#x2E;&#x63;&#x6F;&#x6D;">&#x63;&#x6F;&#x6E;&#x74;&#x61;&#x63;&#x74;&#x40;&#x61;&#x63;&#x74;&#x69;&#x6F;&#x6E;&#x6D;&#x6C;&#x2E;&#x63;&#x6F;&#x6D;</a>
diff --git a/docs/manual/source/templates/ecommercerecommendation/train-with-rate-event.html.md.erb b/docs/manual/source/templates/ecommercerecommendation/train-with-rate-event.html.md.erb
index 2183e63..d4312d3 100644
--- a/docs/manual/source/templates/ecommercerecommendation/train-with-rate-event.html.md.erb
+++ b/docs/manual/source/templates/ecommercerecommendation/train-with-rate-event.html.md.erb
@@ -93,7 +93,7 @@
 
 ```
 
-### Prepartar.scala
+### Preparator.scala
 
 Modify Preparator to pass rateEvents to algorithm as PreparedData (Replace all `ViewEvent` with `RateEvent`. Replace all `viewEvent` with `rateEvent`)
 
@@ -124,7 +124,7 @@
 
 ```
 
-### ALSAlgorithm.scala
+### ECommAlgorithm.scala
 
 Modify `train()` method to train with rate event.
 
@@ -177,7 +177,7 @@
       iterations = ap.numIterations,
       lambda = ap.lambda,
       blocks = -1,
-      alpha = 1.0,
+      alpha = 1.0, // WILL BE REMOVED
       seed = seed)
     ...
 
diff --git a/docs/manual/source/templates/recommendation/evaluation.html.md.erb b/docs/manual/source/templates/recommendation/evaluation.html.md.erb
index afe1057..2e38b1c 100644
--- a/docs/manual/source/templates/recommendation/evaluation.html.md.erb
+++ b/docs/manual/source/templates/recommendation/evaluation.html.md.erb
@@ -38,13 +38,13 @@
 2. the `EngineParamsGenerator`, it contains a list of engine params to test
    against.
 The following command kickstarts the evaluation
-workflow for the classification template.
+workflow for the classification template (replace "org.template" with your package).
 
 ```
 $ pio build
 ...
-$ pio eval org.template.recommendation.RecommendationEvaluation \
-    org.template.recommendation.EngineParamsList
+$ pio eval org.template.RecommendationEvaluation \
+    org.template.EngineParamsList
 ```
 
 You will see the following output:
@@ -100,7 +100,7 @@
 
 The console prints out the evaluation meric score of each engine params, and finally
 pretty print the optimal engine params. Amongs the 3 engine params we evaluate,
-The second yeilds the best Prediction@k score of ~0.1521.
+the best Prediction@k has a score of ~0.1521.
 
 
 ## The Evaluation Design
@@ -109,7 +109,7 @@
 will cover the evaluation aspects which are specific to the recommendation
 engine.
 
-In recommendation evaluation, the raw data is a sequence of known rating.  A
+In recommendation evaluation, the raw data is a sequence of known ratings.  A
 rating has 3 components: user, item, and a score. We use the $k-fold$ method for
 evaluation, the raw data is sliced into a sequence of (training, validation)
 data tuple.
@@ -126,7 +126,7 @@
 There are multiple assumptions we have to make when we evaluate a
 recommendation engine:
 
-- Definition of 'good'. We want to quantity if the engine is able to recommend
+- Definition of 'good'. We want to quantify if the engine is able to recommend
 items which the user likes, we need to define what is meant by 'good'. In this
 examle, we have two kinds of events: 'rate' and 'buy'. The 'rate' event is
 associated with a rating value which ranges between 1 to 4, and the 'buy'
@@ -138,7 +138,7 @@
 data contains rating for all user-item tuples. In contrast, of a system containing
 1000 items, a user may only have rated 20 of them, leaving 980 items unrated. There
 is no way for us to certainly tell if the user likes an unrated product.
-When we examinte the evaluation result, it is important for us to keep in mind
+When we examine the evaluation result, it is important for us to keep in mind
 that the final metric is only an approximation of the actual result.
 
 - Recommendation affects user behavior. Suppose you are a e-commerce company and
@@ -158,7 +158,7 @@
 
 In MyRecommendation/src/main/scala/***Engine.scala***,
 we define the `ActualResult` which represents the user rating for validation.
-It stores the list of rating in the validation set for a user.
+It stores the list of ratings in the validation set for a user.
 
 ```scala
 case class ActualResult(
@@ -168,9 +168,9 @@
 
 ### Implement Data Generate Method in DataSource
 
-In MyRecommendatin/src/main/scala/***DataSource.scala***,
+In MyRecommendation/src/main/scala/***DataSource.scala***,
 the method `readEval` method reads, and selects, data from datastore
-and resturns a sequence of (training, validation) data.
+and returns a sequence of (training, validation) data.
 
 ```scala
 case class DataSourceEvalParams(kFold: Int, queryNum: Int)
@@ -292,7 +292,7 @@
 A good metric should be able to distinguish the good from the bad.
 
 A way to define relevant is to use the notion of rating threshold. If the user
-rating for an item is higher than certain threshold, we say it is relevant.
+rating for an item is higher than a certain threshold, we say it is relevant.
 However, without looking at the data, it is hard to pick a reasonable threshold.
 We can set the threshold be as high as the maximum rating of 4.0, but it may
 severely limit the relevant set size, and the precision scores will be close to
@@ -338,12 +338,12 @@
 and `k` defines how many items we evaluate in the `PredictedResult`.
 We generate a list of all combinations (line 11).
 
-These metrics are expecified as `otherMetrics` (lines 9 to 11), they
+These metrics are specified as `otherMetrics` (lines 9 to 11), they
 will be calculated and generated on the evaluation UI.
 
 To run this evaluation, you can:
 
 ```
-$ pio eval org.template.recommendation.ComprehensiveRecommendationEvaluation \
-  org.template.recommendation.EngineParamsList
+$ pio eval org.template.ComprehensiveRecommendationEvaluation \
+  org.template.EngineParamsList
 ```
diff --git a/docs/manual/source/templates/recommendation/quickstart.html.md.erb b/docs/manual/source/templates/recommendation/quickstart.html.md.erb
index 33923ab..46d15b9 100644
--- a/docs/manual/source/templates/recommendation/quickstart.html.md.erb
+++ b/docs/manual/source/templates/recommendation/quickstart.html.md.erb
@@ -63,7 +63,7 @@
 -H "Content-Type: application/json" \
 -d '{
   "event" : "rate",
-  "entityType" : "user"
+  "entityType" : "user",
   "entityId" : "u0",
   "targetEntityType" : "item",
   "targetEntityId" : "i0",
@@ -165,7 +165,7 @@
 -H "Content-Type: application/json" \
 -d '{
   "event" : "buy",
-  "entityType" : "user"
+  "entityType" : "user",
   "entityId" : "u1",
   "targetEntityType" : "item",
   "targetEntityId" : "i2",
@@ -246,7 +246,7 @@
 ```
 $ cd MyRecommendation
 $ curl https://raw.githubusercontent.com/apache/spark/master/data/mllib/sample_movielens_data.txt --create-dirs -o data/sample_movielens_data.txt
-$ python data/import_eventserver.py --access_key 3mZWDzci2D5YsqAnqNnXH9SB6Rg3dsTBs8iHkK6X2i54IQsIZI1eEeQQyMfs7b3F
+$ python data/import_eventserver.py --access_key $ACCESS_KEY
 ```
 
 You should see the following output:
diff --git a/docs/manual/source/templates/vanilla/dase.html.md.erb b/docs/manual/source/templates/vanilla/dase.html.md.erb
index 5cd23d2..c649615 100644
--- a/docs/manual/source/templates/vanilla/dase.html.md.erb
+++ b/docs/manual/source/templates/vanilla/dase.html.md.erb
@@ -16,7 +16,7 @@
 
 ### P2LAlgorithm
 
-By default, the Algorithm of the Vanilla template trains a simple model which does not contain RDD, as you can see you in Algorithm.scala:
+By default, the Algorithm of the Vanilla template trains a simple model which does not contain RDD, as you can see in Algorithm.scala:
 
 ```scala
 
@@ -83,6 +83,7 @@
       s"mc=${mc}" +
       // ADDED for debugging
       s"mRdd=[${mRdd.count()}] (${mRdd.take(2).toList}...)"
+    }
 }
 
 ```