diff --git a/giraph-block-app/src/main/java/org/apache/giraph/block_app/library/internal/SendMessageWithCombinerPiece.java b/giraph-block-app/src/main/java/org/apache/giraph/block_app/library/internal/SendMessageWithCombinerPiece.java
index c44ef8d..122ed68 100644
--- a/giraph-block-app/src/main/java/org/apache/giraph/block_app/library/internal/SendMessageWithCombinerPiece.java
+++ b/giraph-block-app/src/main/java/org/apache/giraph/block_app/library/internal/SendMessageWithCombinerPiece.java
@@ -18,6 +18,9 @@
 package org.apache.giraph.block_app.library.internal;
 
 import java.util.Iterator;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.StreamSupport;
 
 import org.apache.giraph.block_app.framework.api.BlockWorkerReceiveApi;
 import org.apache.giraph.block_app.framework.api.BlockWorkerSendApi;
@@ -39,7 +42,6 @@
 import org.apache.hadoop.io.WritableComparable;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Iterators;
 
 /**
  * Piece that sends a message provided through messageProducer to given set of
@@ -103,14 +105,10 @@
                   new SupplierFromVertex<I, V, E, Iterator<I>>() {
                     @Override
                     public Iterator<I> get(Vertex<I, V, E> vertex) {
-                      return Iterators.filter(
-                          targetsSupplier.get(vertex),
-                          new com.google.common.base.Predicate<I>() {
-                            @Override
-                            public boolean apply(I targetId) {
-                              return stripePredicate.apply(targetId);
-                            }
-                          });
+                      return StreamSupport.stream(
+                        Spliterators.spliteratorUnknownSize(
+                          targetsSupplier.get(vertex), Spliterator.ORDERED),
+                        false).filter(stripePredicate::apply).iterator();
                     }
                   },
                   messagesConsumer));
diff --git a/giraph-core/src/main/java/org/apache/giraph/edge/ByteArrayEdges.java b/giraph-core/src/main/java/org/apache/giraph/edge/ByteArrayEdges.java
index 509546c..a2b53e3 100644
--- a/giraph-core/src/main/java/org/apache/giraph/edge/ByteArrayEdges.java
+++ b/giraph-core/src/main/java/org/apache/giraph/edge/ByteArrayEdges.java
@@ -18,7 +18,6 @@
 
 package org.apache.giraph.edge;
 
-import com.google.common.collect.Iterators;
 import com.google.common.collect.UnmodifiableIterator;
 import org.apache.giraph.utils.ExtendedDataInput;
 import org.apache.giraph.utils.ExtendedDataOutput;
@@ -34,6 +33,7 @@
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Collections;
 
 /**
  * {@link OutEdges} implementation backed by a byte array.
@@ -177,7 +177,7 @@
   @Override
   public Iterator<Edge<I, E>> iterator() {
     if (edgeCount == 0) {
-      return Iterators.emptyIterator();
+      return Collections.emptyListIterator();
     } else {
       return new ByteArrayEdgeIterator();
     }
diff --git a/giraph-core/src/main/java/org/apache/giraph/factories/DefaultMessageValueFactory.java b/giraph-core/src/main/java/org/apache/giraph/factories/DefaultMessageValueFactory.java
index b10d30c..61a2a44 100644
--- a/giraph-core/src/main/java/org/apache/giraph/factories/DefaultMessageValueFactory.java
+++ b/giraph-core/src/main/java/org/apache/giraph/factories/DefaultMessageValueFactory.java
@@ -17,12 +17,11 @@
  */
 package org.apache.giraph.factories;
 
+import com.google.common.base.MoreObjects;
 import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
 import org.apache.giraph.utils.WritableUtils;
 import org.apache.hadoop.io.Writable;
 
-import com.google.common.base.Objects;
-
 /**
  * Factory class to create default message values.
  *
@@ -51,7 +50,7 @@
   }
 
   @Override public String toString() {
-    return Objects.toStringHelper(this)
+    return MoreObjects.toStringHelper(this)
         .add("messageValueClass", messageValueClass)
         .toString();
   }
diff --git a/giraph-core/src/main/java/org/apache/giraph/jython/JythonJob.java b/giraph-core/src/main/java/org/apache/giraph/jython/JythonJob.java
index c7e9eae..128c41b 100644
--- a/giraph-core/src/main/java/org/apache/giraph/jython/JythonJob.java
+++ b/giraph-core/src/main/java/org/apache/giraph/jython/JythonJob.java
@@ -17,9 +17,9 @@
  */
 package org.apache.giraph.jython;
 
+import com.google.common.base.MoreObjects;
 import org.apache.giraph.combiner.MessageCombiner;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -60,7 +60,7 @@
     }
 
     @Override public String toString() {
-      return Objects.toStringHelper(this)
+      return MoreObjects.toStringHelper(this)
           .add("table", table)
           .add("partition_filter", partition_filter)
           .toString();
@@ -93,7 +93,7 @@
     }
 
     @Override public String toString() {
-      return Objects.toStringHelper(this)
+      return MoreObjects.toStringHelper(this)
           .add("table", getTable())
           .add("partition_filter", getPartition_filter())
           .add("id_column", id_column)
@@ -138,7 +138,7 @@
     }
 
     @Override public String toString() {
-      return Objects.toStringHelper(this)
+      return MoreObjects.toStringHelper(this)
           .add("table", getTable())
           .add("partition_filter", getPartition_filter())
           .add("source_id_column", source_id_column)
@@ -190,7 +190,7 @@
     }
 
     @Override public String toString() {
-      return Objects.toStringHelper(this)
+      return MoreObjects.toStringHelper(this)
           .add("table", table)
           .add("partition", partition)
           .add("id_column", id_column)
diff --git a/giraph-core/src/main/java/org/apache/giraph/scripting/DeployedScript.java b/giraph-core/src/main/java/org/apache/giraph/scripting/DeployedScript.java
index c4353d3..59fec59 100644
--- a/giraph-core/src/main/java/org/apache/giraph/scripting/DeployedScript.java
+++ b/giraph-core/src/main/java/org/apache/giraph/scripting/DeployedScript.java
@@ -17,6 +17,7 @@
  */
 package org.apache.giraph.scripting;
 
+import com.google.common.base.MoreObjects;
 import org.apache.giraph.graph.Language;
 import org.codehaus.jackson.annotate.JsonCreator;
 import org.codehaus.jackson.annotate.JsonProperty;
@@ -87,7 +88,7 @@
 
   @Override
   public String toString() {
-    return Objects.toStringHelper(this)
+    return MoreObjects.toStringHelper(this)
         .add("path", path)
         .add("deployType", deployType)
         .add("language", language)
diff --git a/giraph-core/src/main/java/org/apache/giraph/types/JavaWritablePair.java b/giraph-core/src/main/java/org/apache/giraph/types/JavaWritablePair.java
index 752f5c1..6fa624e 100644
--- a/giraph-core/src/main/java/org/apache/giraph/types/JavaWritablePair.java
+++ b/giraph-core/src/main/java/org/apache/giraph/types/JavaWritablePair.java
@@ -17,6 +17,7 @@
  */
 package org.apache.giraph.types;
 
+import com.google.common.base.MoreObjects;
 import org.apache.hadoop.io.BooleanWritable;
 import org.apache.hadoop.io.ByteWritable;
 import org.apache.hadoop.io.DoubleWritable;
@@ -136,7 +137,7 @@
 
   @Override
   public String toString() {
-    return Objects.toStringHelper(this)
+    return MoreObjects.toStringHelper(this)
         .add("javaClass", javaClass.getSimpleName())
         .add("writableClass", writableClass.getSimpleName())
         .toString();
diff --git a/giraph-core/src/main/java/org/apache/giraph/utils/EmptyIterable.java b/giraph-core/src/main/java/org/apache/giraph/utils/EmptyIterable.java
index 8be82b5..0e4f4ce 100644
--- a/giraph-core/src/main/java/org/apache/giraph/utils/EmptyIterable.java
+++ b/giraph-core/src/main/java/org/apache/giraph/utils/EmptyIterable.java
@@ -18,7 +18,7 @@
 
 package org.apache.giraph.utils;
 
-import com.google.common.collect.Iterators;
+import java.util.Collections;
 
 import java.util.Iterator;
 
@@ -43,7 +43,7 @@
 
   @Override
   public Iterator<T> iterator() {
-    return Iterators.emptyIterator();
+    return Collections.emptyIterator();
   }
 }
 
diff --git a/giraph-core/src/main/java/org/apache/giraph/utils/TestGraph.java b/giraph-core/src/main/java/org/apache/giraph/utils/TestGraph.java
index 363d4c0..9ff6b0f 100644
--- a/giraph-core/src/main/java/org/apache/giraph/utils/TestGraph.java
+++ b/giraph-core/src/main/java/org/apache/giraph/utils/TestGraph.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map.Entry;
 
+import com.google.common.base.MoreObjects;
 import org.apache.giraph.conf.GiraphConfiguration;
 import org.apache.giraph.conf.GiraphConstants;
 import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
@@ -36,7 +37,6 @@
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.WritableComparable;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 
 /**
@@ -238,6 +238,7 @@
 
   @Override
   public String toString() {
-    return Objects.toStringHelper(this).add("vertices", vertices).toString();
+    return MoreObjects.toStringHelper(this).add(
+      "vertices", vertices).toString();
   }
 }
diff --git a/pom.xml b/pom.xml
index b10ba6f..dc54640 100644
--- a/pom.xml
+++ b/pom.xml
@@ -332,7 +332,7 @@
     <dep.fasterxml-jackson.version>2.1.2</dep.fasterxml-jackson.version>
     <dep.fastutil.version>6.5.4</dep.fastutil.version>
     <dep.google.findbugs.version>2.0.2</dep.google.findbugs.version>
-    <dep.guava.version>18.0</dep.guava.version>
+    <dep.guava.version>21.0</dep.guava.version>
     <dep.hbase.version>0.94.16</dep.hbase.version>
     <dep.hcatalog.version>0.5.0-incubating</dep.hcatalog.version>
     <dep.hive.version>0.11.0</dep.hive.version>
@@ -632,16 +632,6 @@
                   <exclude>commons-logging:commons-logging-api</exclude>
                   <!-- clashes with cglib:cglib-nodep -->
                   <exclude>cglib:cglib</exclude>
-                  <!-- use guava -->
-                  <exclude>com.google.collections:google-collections</exclude>
-                  <!-- but not the badly numbered ones... -->
-                  <exclude>com.google.guava:guava</exclude>
-                  <!-- Clashes with com.google.code.findbugs:annotations and having both jars -->
-                  <!-- as a dependency then clashes with the dependency checker (because it   -->
-                  <!-- is not very good at handling annotations). Use the annotations jar     -->
-                  <!-- instead which has all jsr305 annotations and the additional findbugs   -->
-                  <!-- stuff. -->
-                  <exclude>com.google.code.findbugs:jsr305</exclude>
                   <!-- Use the official version at javax.servlet:javax.servlet-api -->
                   <exclude>org.eclipse.jetty.orbit:javax.servlet</exclude>
                   <!-- Renamed airlift modules -->
@@ -655,10 +645,6 @@
                   <exclude>io.airlift:rack-packaging-experimental</exclude>
                   <exclude>io.airlift:rack-server-base-experimental</exclude>
                 </excludes>
-                <includes>
-                  <!-- whitelist the well numbered guava releases -->
-                  <include>com.google.guava:guava:[10.0.1,)</include>
-                </includes>
               </bannedDependencies>
               <requireMavenVersion>
                 <version>${project.maven.version}</version>
@@ -862,10 +848,6 @@
         <groupId>com.ning.maven.plugins</groupId>
         <artifactId>maven-dependency-versions-check-plugin</artifactId>
       </plugin>
-      <plugin>
-        <groupId>com.ning.maven.plugins</groupId>
-        <artifactId>maven-duplicate-finder-plugin</artifactId>
-      </plugin>
     </plugins>
   </build>
 
