diff --git a/JGit/README.md b/JGit/README.md
new file mode 100644
index 0000000000..5c65f1101b
--- /dev/null
+++ b/JGit/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [A Guide to JGit](http://www.baeldung.com/jgit)
diff --git a/algorithms/README.md b/algorithms/README.md
new file mode 100644
index 0000000000..4789768fad
--- /dev/null
+++ b/algorithms/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [Dijkstra Algorithm in Java](http://www.baeldung.com/java-dijkstra)
diff --git a/apache-bval/README.md b/apache-bval/README.md
new file mode 100644
index 0000000000..80ea149993
--- /dev/null
+++ b/apache-bval/README.md
@@ -0,0 +1,2 @@
+### Relevant Articles:
+- [Intro to Apache BVal](http://www.baeldung.com/apache-bval)
diff --git a/apache-thrift/README.md b/apache-thrift/README.md
new file mode 100644
index 0000000000..d8b9195dcc
--- /dev/null
+++ b/apache-thrift/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [Working with Apache Thrift](http://www.baeldung.com/apache-thrift)
diff --git a/apache-velocity/README.md b/apache-velocity/README.md
new file mode 100644
index 0000000000..53c67f847e
--- /dev/null
+++ b/apache-velocity/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [Introduction to Apache Velocity](http://www.baeldung.com/apache-velocity)
diff --git a/core-java-9/README.md b/core-java-9/README.md
index 1b44239e40..53ad79e59c 100644
--- a/core-java-9/README.md
+++ b/core-java-9/README.md
@@ -6,3 +6,5 @@
### Relevant Articles:
- [Java 9 Stream API Improvements](http://www.baeldung.com/java-9-stream-api)
+- [Java 9 Convenience Factory Methods for Collections](http://www.baeldung.com/java-9-collections-factory-methods)
+- [New Stream Collectors in Java 9](http://www.baeldung.com/java9-stream-collectors)
diff --git a/core-java/README.md b/core-java/README.md
index 341dbdf910..a34908d8ae 100644
--- a/core-java/README.md
+++ b/core-java/README.md
@@ -58,3 +58,24 @@
- [Guide to java.util.concurrent.BlockingQueue](http://www.baeldung.com/java-blocking-queue)
- [Guide to CountDownLatch in Java](http://www.baeldung.com/java-countdown-latch)
- [How to Design a Genetic Algorithm in Java](http://www.baeldung.com/java-genetic-algorithm)
+- [A Guide to ConcurrentMap](http://www.baeldung.com/java-concurrent-map)
+- [Guide to PriorityBlockingQueue in Java](http://www.baeldung.com/java-priority-blocking-queue)
+- [Guide to Java 8 groupingBy Collector](http://www.baeldung.com/java-groupingby-collector)
+- [Avoiding the ConcurrentModificationException in Java](http://www.baeldung.com/java-concurrentmodificationexception)
+- [Guide to WeakHashMap in Java](http://www.baeldung.com/java-weakhashmap)
+- [Strategy Design Pattern in Java 8](http://www.baeldung.com/java-strategy-pattern)
+- [Java 8 and Infinite Streams](http://www.baeldung.com/java-inifinite-streams)
+- [Custom Thread Pools In Java 8 Parallel Streams](http://www.baeldung.com/java-8-parallel-streams-custom-threadpool)
+- [String Operations with Java Streams](http://www.baeldung.com/java-stream-operations-on-strings)
+- [Spring Security – Cache Control Headers](http://www.baeldung.com/spring-security-cache-control-headers)
+- [Basic Introduction to JMX](http://www.baeldung.com/java-management-extensions)
+- [AWS Lambda With Java](http://www.baeldung.com/java-aws-lambda)
+- [Introduction to Nashorn](http://www.baeldung.com/java-nashorn)
+- [Exceptions in Java 8 Lambda Expressions](http://www.baeldung.com/java-lambda-exceptions)
+- [Guide to the Guava BiMap](http://www.baeldung.com/guava-bimap)
+- [Iterable to Stream in Java](http://www.baeldung.com/java-iterable-to-stream)
+- [Java 8 Stream findFirst() vs. findAny()](http://www.baeldung.com/java-stream-findfirst-vs-findany)
+- [Chained Exceptions in Java](http://www.baeldung.com/java-chained-exceptions)
+- [The Java HashMap Under the Hood](http://www.baeldung.com/java-hashmap)
+- [A Guide to LinkedHashMap in Java](http://www.baeldung.com/java-linked-hashmap)
+- [A Guide to TreeMap in Java](http://www.baeldung.com/java-treemap)
diff --git a/core-java/src/test/java/com/baeldung/java/map/README.md b/core-java/src/test/java/com/baeldung/java/map/README.md
deleted file mode 100644
index 0bba153763..0000000000
--- a/core-java/src/test/java/com/baeldung/java/map/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-### Relevant Articles:
-- [The Java HashMap Under the Hood](http://www.baeldung.com/java-hashmap)
diff --git a/couchbase-sdk/README.md b/couchbase-sdk/README.md
index 9cdcdea012..f124a0192c 100644
--- a/couchbase-sdk/README.md
+++ b/couchbase-sdk/README.md
@@ -4,6 +4,7 @@
- [Introduction to Couchbase SDK for Java](http://www.baeldung.com/java-couchbase-sdk)
- [Using Couchbase in a Spring Application](http://www.baeldung.com/couchbase-sdk-spring)
- [Asynchronous Batch Opereations in Couchbase](http://www.baeldung.com/async-batch-operations-in-couchbase)
+- [Querying Couchbase with MapReduce Views](http://www.baeldung.com/couchbase-query-mapreduce-view)
### Overview
This Maven project contains the Java code for the Couchbase entities and Spring services
diff --git a/disruptor/README.md b/disruptor/README.md
index e69de29bb2..779b1e89c4 100644
--- a/disruptor/README.md
+++ b/disruptor/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [Concurrency with LMAX Disruptor – An Introduction](http://www.baeldung.com/lmax-disruptor-concurrency)
diff --git a/ejb/README.md b/ejb/README.md
new file mode 100644
index 0000000000..08392bc80d
--- /dev/null
+++ b/ejb/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [Guide to EJB Set-up](http://www.baeldung.com/ejb-intro)
diff --git a/guava/README.md b/guava/README.md
index 40e7f19f41..ee224bae5f 100644
--- a/guava/README.md
+++ b/guava/README.md
@@ -16,3 +16,11 @@
- [Guava – Sets](http://www.baeldung.com/guava-sets)
- [Guava – Maps](http://www.baeldung.com/guava-maps)
- [Guava Set + Function = Map](http://www.baeldung.com/guava-set-function-map-tutorial)
+- [Guide to Guava’s Ordering](http://www.baeldung.com/guava-ordering)
+- [Guide to Guava’s PreConditions](http://www.baeldung.com/guava-preconditions)
+- [Introduction to Guava CacheLoader](http://www.baeldung.com/guava-cacheloader)
+- [Guide to Guava’s EventBus](http://www.baeldung.com/guava-eventbus)
+- [Guide to Guava Multimap](http://www.baeldung.com/guava-multimap)
+- [Guide to Guava RangeSet](http://www.baeldung.com/guava-rangeset)
+- [Guide to Guava RangeMap](http://www.baeldung.com/guava-rangemap)
+- [Guide to Guava Table](http://www.baeldung.com/guava-table)
diff --git a/httpclient/README.md b/httpclient/README.md
index a848edfea6..2a98c2feac 100644
--- a/httpclient/README.md
+++ b/httpclient/README.md
@@ -19,3 +19,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Multipart Upload with HttpClient 4](http://www.baeldung.com/httpclient-multipart-upload)
- [HttpAsyncClient Tutorial](http://www.baeldung.com/httpasyncclient-tutorial)
- [HttpClient 4 Tutorial](http://www.baeldung.com/httpclient-guide)
+- [Advanced HttpClient Configuration](http://www.baeldung.com/httpclient-advanced-config)
diff --git a/jackson/README.md b/jackson/README.md
index 67a03589a8..d9faa377f1 100644
--- a/jackson/README.md
+++ b/jackson/README.md
@@ -25,3 +25,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [More Jackson Annotations](http://www.baeldung.com/jackson-advanced-annotations)
- [Inheritance with Jackson](http://www.baeldung.com/jackson-inheritance)
- [Guide to @JsonFormat in Jackson](http://www.baeldung.com/jackson-jsonformat)
+- [A Guide to Optional with Jackson](http://www.baeldung.com/jackson-optional)
diff --git a/java-mongodb/README.md b/java-mongodb/README.md
new file mode 100644
index 0000000000..01245ac6cf
--- /dev/null
+++ b/java-mongodb/README.md
@@ -0,0 +1,3 @@
+## Relevant articles:
+
+- [A Guide to MongoDB with Java](http://www.baeldung.com/java-mongodb)
diff --git a/javaslang/README.md b/javaslang/README.md
index 334ac02f60..e451883516 100644
--- a/javaslang/README.md
+++ b/javaslang/README.md
@@ -1,2 +1,4 @@
### Relevant Articles:
- [Introduction to Javaslang](http://www.baeldung.com/javaslang)
+- [Guide to Try in Javaslang](http://www.baeldung.com/javaslang-try)
+- [Guide to Pattern Matching in Javaslang](http://www.baeldung.com/javaslang-pattern-matching)
diff --git a/jee7/README.md b/jee7/README.md
index 44ca9c2f6e..bc242c3340 100644
--- a/jee7/README.md
+++ b/jee7/README.md
@@ -1,2 +1,3 @@
### Relevant Articles:
- [Scheduling in Java EE](http://www.baeldung.com/scheduling-in-java-enterprise-edition)
+- [JSON Processing in Java EE 7](http://www.baeldung.com/jee7-json)
diff --git a/jee7/src/main/java/com/baeldung/javaeeannotations/AccountServlet.java b/jee7/src/main/java/com/baeldung/javaeeannotations/AccountServlet.java
new file mode 100644
index 0000000000..e3f1667595
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/javaeeannotations/AccountServlet.java
@@ -0,0 +1,57 @@
+package com.baeldung.javaeeannotations;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.HttpConstraint;
+import javax.servlet.annotation.HttpMethodConstraint;
+import javax.servlet.annotation.ServletSecurity;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(
+ name = "BankAccountServlet",
+ description = "Represents a Bank Account and it's transactions",
+ urlPatterns = {"/account", "/bankAccount" },
+ initParams = { @WebInitParam(name = "type", value = "savings") }
+ )
+@ServletSecurity(
+ value = @HttpConstraint(rolesAllowed = {"admin"}),
+ httpMethodConstraints = {@HttpMethodConstraint(value = "POST", rolesAllowed = {"admin"})}
+ )
+public class AccountServlet extends javax.servlet.http.HttpServlet {
+
+ String accountType = null;
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ accountType = config.getInitParameter("type");
+ }
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ PrintWriter writer = response.getWriter();
+ writer.println("Hello, I am an AccountServlet!");
+ writer.flush();
+ }
+
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ double accountBalance = 1000d;
+ double interestRate = Double.parseDouble(request.getAttribute("interest").toString());
+
+ String paramDepositAmt = request.getParameter("dep");
+ double depositAmt = Double.parseDouble(paramDepositAmt);
+
+ accountBalance = accountBalance + depositAmt;
+
+ PrintWriter writer = response.getWriter();
+ writer.println(" Balance of " + accountType + " account is: " +
+ accountBalance + "
This account bares an interest rate of " + interestRate +
+ " % ");
+ writer.flush();
+
+ }
+}
diff --git a/jee7/src/main/java/com/baeldung/javaeeannotations/BankAppServletContextListener.java b/jee7/src/main/java/com/baeldung/javaeeannotations/BankAppServletContextListener.java
new file mode 100644
index 0000000000..6b43dd8a84
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/javaeeannotations/BankAppServletContextListener.java
@@ -0,0 +1,17 @@
+package com.baeldung.javaeeannotations;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.annotation.WebListener;
+
+@WebListener
+public class BankAppServletContextListener implements ServletContextListener {
+
+ public void contextInitialized(ServletContextEvent sce) {
+ sce.getServletContext().setAttribute("ATTR_DEFAULT_LANGUAGE", "english");
+ }
+
+ public void contextDestroyed(ServletContextEvent sce) {
+ System.out.println("CONTEXT DESTROYED");
+ }
+}
diff --git a/jee7/src/main/java/com/baeldung/javaeeannotations/LoggingFilter.java b/jee7/src/main/java/com/baeldung/javaeeannotations/LoggingFilter.java
new file mode 100644
index 0000000000..97de5ec0de
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/javaeeannotations/LoggingFilter.java
@@ -0,0 +1,36 @@
+package com.baeldung.javaeeannotations;
+
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebFilter(
+ urlPatterns = "/bankAccount/*",
+ filterName = "LoggingFilter",
+ description = "Filter all account transaction URLs"
+ )
+public class LoggingFilter implements javax.servlet.Filter {
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ HttpServletRequest req = (HttpServletRequest) request;
+ HttpServletResponse res = (HttpServletResponse) response;
+
+ res.sendRedirect(req.getContextPath() + "/login.jsp");
+ chain.doFilter(request, response);
+ }
+
+ @Override
+ public void destroy() {
+ }
+
+}
diff --git a/jee7/src/main/java/com/baeldung/javaeeannotations/UploadCustomerDocumentsServlet.java b/jee7/src/main/java/com/baeldung/javaeeannotations/UploadCustomerDocumentsServlet.java
new file mode 100644
index 0000000000..8a6c709b81
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/javaeeannotations/UploadCustomerDocumentsServlet.java
@@ -0,0 +1,29 @@
+package com.baeldung.javaeeannotations;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.MultipartConfig;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
+
+@WebServlet(urlPatterns = { "/uploadCustDocs" })
+@MultipartConfig(
+ fileSizeThreshold = 1024 * 1024 * 20,
+ maxFileSize = 1024 * 1024 * 20,
+ maxRequestSize = 1024 * 1024 * 25,
+ location = "D:/custDocs"
+ )
+public class UploadCustomerDocumentsServlet extends HttpServlet {
+
+ protected void doPost(
+ HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ for (Part part : request.getParts()) {
+ part.write("myFile");
+ }
+ }
+
+}
diff --git a/jee7/src/main/webapp/WEB-INF/web.xml b/jee7/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..0a3d84d2d4
--- /dev/null
+++ b/jee7/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,11 @@
+