diff --git a/tags/README.md b/common/tags/README.md
similarity index 100%
rename from tags/README.md
rename to common/tags/README.md
diff --git a/tags/pom.xml b/common/tags/pom.xml
similarity index 97%
rename from tags/pom.xml
rename to common/tags/pom.xml
index 3e8e6f6182875b59c830ea61d4ad09dcc01f1356..8e702b4fefe8c0d9f6c51f736991e7403a535a27 100644
--- a/tags/pom.xml
+++ b/common/tags/pom.xml
@@ -23,7 +23,7 @@
     <groupId>org.apache.spark</groupId>
     <artifactId>spark-parent_2.11</artifactId>
     <version>2.0.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
+    <relativePath>../../pom.xml</relativePath>
   </parent>
 
   <groupId>org.apache.spark</groupId>
diff --git a/tags/src/main/java/org/apache/spark/tags/DockerTest.java b/common/tags/src/main/java/org/apache/spark/tags/DockerTest.java
similarity index 100%
rename from tags/src/main/java/org/apache/spark/tags/DockerTest.java
rename to common/tags/src/main/java/org/apache/spark/tags/DockerTest.java
diff --git a/tags/src/main/java/org/apache/spark/tags/ExtendedHiveTest.java b/common/tags/src/main/java/org/apache/spark/tags/ExtendedHiveTest.java
similarity index 100%
rename from tags/src/main/java/org/apache/spark/tags/ExtendedHiveTest.java
rename to common/tags/src/main/java/org/apache/spark/tags/ExtendedHiveTest.java
diff --git a/tags/src/main/java/org/apache/spark/tags/ExtendedYarnTest.java b/common/tags/src/main/java/org/apache/spark/tags/ExtendedYarnTest.java
similarity index 100%
rename from tags/src/main/java/org/apache/spark/tags/ExtendedYarnTest.java
rename to common/tags/src/main/java/org/apache/spark/tags/ExtendedYarnTest.java
diff --git a/unsafe/pom.xml b/common/unsafe/pom.xml
similarity index 98%
rename from unsafe/pom.xml
rename to common/unsafe/pom.xml
index 75fea556eeae1c0f553b08286097c709e529908a..5250014739da25d689ce49e072e442b9f04fe2ee 100644
--- a/unsafe/pom.xml
+++ b/common/unsafe/pom.xml
@@ -23,7 +23,7 @@
     <groupId>org.apache.spark</groupId>
     <artifactId>spark-parent_2.11</artifactId>
     <version>2.0.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
+    <relativePath>../../pom.xml</relativePath>
   </parent>
 
   <groupId>org.apache.spark</groupId>
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/KVIterator.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/KVIterator.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/KVIterator.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/KVIterator.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/Platform.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/array/ByteArrayMethods.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/array/ByteArrayMethods.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/array/ByteArrayMethods.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/array/ByteArrayMethods.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/array/LongArray.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/array/LongArray.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/array/LongArray.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/array/LongArray.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/hash/Murmur3_x86_32.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/hash/Murmur3_x86_32.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/hash/Murmur3_x86_32.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/hash/Murmur3_x86_32.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryAllocator.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryAllocator.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryAllocator.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryAllocator.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryBlock.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryBlock.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryBlock.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryBlock.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryLocation.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryLocation.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryLocation.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryLocation.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/types/ByteArray.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/types/ByteArray.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/types/ByteArray.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/types/ByteArray.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/types/CalendarInterval.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/types/CalendarInterval.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/types/CalendarInterval.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/types/CalendarInterval.java
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java
similarity index 100%
rename from unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java
rename to common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java
diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/PlatformUtilSuite.java b/common/unsafe/src/test/java/org/apache/spark/unsafe/PlatformUtilSuite.java
similarity index 100%
rename from unsafe/src/test/java/org/apache/spark/unsafe/PlatformUtilSuite.java
rename to common/unsafe/src/test/java/org/apache/spark/unsafe/PlatformUtilSuite.java
diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/array/LongArraySuite.java b/common/unsafe/src/test/java/org/apache/spark/unsafe/array/LongArraySuite.java
similarity index 100%
rename from unsafe/src/test/java/org/apache/spark/unsafe/array/LongArraySuite.java
rename to common/unsafe/src/test/java/org/apache/spark/unsafe/array/LongArraySuite.java
diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/hash/Murmur3_x86_32Suite.java b/common/unsafe/src/test/java/org/apache/spark/unsafe/hash/Murmur3_x86_32Suite.java
similarity index 100%
rename from unsafe/src/test/java/org/apache/spark/unsafe/hash/Murmur3_x86_32Suite.java
rename to common/unsafe/src/test/java/org/apache/spark/unsafe/hash/Murmur3_x86_32Suite.java
diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/types/CalendarIntervalSuite.java b/common/unsafe/src/test/java/org/apache/spark/unsafe/types/CalendarIntervalSuite.java
similarity index 100%
rename from unsafe/src/test/java/org/apache/spark/unsafe/types/CalendarIntervalSuite.java
rename to common/unsafe/src/test/java/org/apache/spark/unsafe/types/CalendarIntervalSuite.java
diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/types/UTF8StringSuite.java b/common/unsafe/src/test/java/org/apache/spark/unsafe/types/UTF8StringSuite.java
similarity index 100%
rename from unsafe/src/test/java/org/apache/spark/unsafe/types/UTF8StringSuite.java
rename to common/unsafe/src/test/java/org/apache/spark/unsafe/types/UTF8StringSuite.java
diff --git a/unsafe/src/test/scala/org/apache/spark/unsafe/types/UTF8StringPropertyCheckSuite.scala b/common/unsafe/src/test/scala/org/apache/spark/unsafe/types/UTF8StringPropertyCheckSuite.scala
similarity index 100%
rename from unsafe/src/test/scala/org/apache/spark/unsafe/types/UTF8StringPropertyCheckSuite.scala
rename to common/unsafe/src/test/scala/org/apache/spark/unsafe/types/UTF8StringPropertyCheckSuite.scala
diff --git a/pom.xml b/pom.xml
index 2376e307ced18bd780628fa0dcd6617b16791c4d..2148379896d35f8f27635b8181d7145f6c7d09a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,7 +89,8 @@
     <module>common/sketch</module>
     <module>common/network-common</module>
     <module>common/network-shuffle</module>
-    <module>tags</module>
+    <module>common/unsafe</module>
+    <module>common/tags</module>
     <module>core</module>
     <module>graphx</module>
     <module>mllib</module>
@@ -99,7 +100,6 @@
     <module>sql/core</module>
     <module>sql/hive</module>
     <module>docker-integration-tests</module>
-    <module>unsafe</module>
     <module>assembly</module>
     <module>external/twitter</module>
     <module>external/flume</module>