Moved to Java8 and applied extensive use of its Stream API