diff --git a/Makefile b/Makefile
index 3b0e45238665490f3002b23cc7c7efd7b381881b..81345e0e3f4d4d59558fdb05bcd722f9ecf9c719 100644
--- a/Makefile
+++ b/Makefile
@@ -2154,11 +2154,11 @@ LIBGRPC++_SRC = \
     src/cpp/client/create_channel.cc \
     src/cpp/client/credentials.cc \
     src/cpp/client/internal_stub.cc \
+    src/cpp/common/completion_queue.cc \
     src/cpp/common/rpc_method.cc \
     src/cpp/proto/proto_utils.cc \
     src/cpp/server/async_server.cc \
     src/cpp/server/async_server_context.cc \
-    src/cpp/server/completion_queue.cc \
     src/cpp/server/server.cc \
     src/cpp/server/server_builder.cc \
     src/cpp/server/server_context_impl.cc \
@@ -2213,11 +2213,11 @@ src/cpp/client/client_context.cc: $(OPENSSL_DEP)
 src/cpp/client/create_channel.cc: $(OPENSSL_DEP)
 src/cpp/client/credentials.cc: $(OPENSSL_DEP)
 src/cpp/client/internal_stub.cc: $(OPENSSL_DEP)
+src/cpp/common/completion_queue.cc: $(OPENSSL_DEP)
 src/cpp/common/rpc_method.cc: $(OPENSSL_DEP)
 src/cpp/proto/proto_utils.cc: $(OPENSSL_DEP)
 src/cpp/server/async_server.cc: $(OPENSSL_DEP)
 src/cpp/server/async_server_context.cc: $(OPENSSL_DEP)
-src/cpp/server/completion_queue.cc: $(OPENSSL_DEP)
 src/cpp/server/server.cc: $(OPENSSL_DEP)
 src/cpp/server/server_builder.cc: $(OPENSSL_DEP)
 src/cpp/server/server_context_impl.cc: $(OPENSSL_DEP)
@@ -2273,11 +2273,11 @@ objs/$(CONFIG)/src/cpp/client/client_context.o:
 objs/$(CONFIG)/src/cpp/client/create_channel.o: 
 objs/$(CONFIG)/src/cpp/client/credentials.o: 
 objs/$(CONFIG)/src/cpp/client/internal_stub.o: 
+objs/$(CONFIG)/src/cpp/common/completion_queue.o: 
 objs/$(CONFIG)/src/cpp/common/rpc_method.o: 
 objs/$(CONFIG)/src/cpp/proto/proto_utils.o: 
 objs/$(CONFIG)/src/cpp/server/async_server.o: 
 objs/$(CONFIG)/src/cpp/server/async_server_context.o: 
-objs/$(CONFIG)/src/cpp/server/completion_queue.o: 
 objs/$(CONFIG)/src/cpp/server/server.o: 
 objs/$(CONFIG)/src/cpp/server/server_builder.o: 
 objs/$(CONFIG)/src/cpp/server/server_context_impl.o: 
diff --git a/build.json b/build.json
index 020a7564bf760891126b5932e2a1762a0931fa76..28039db35a428b02be70c7dfb7b00afd35051d14 100644
--- a/build.json
+++ b/build.json
@@ -411,11 +411,11 @@
         "src/cpp/client/create_channel.cc",
         "src/cpp/client/credentials.cc",
         "src/cpp/client/internal_stub.cc",
+        "src/cpp/common/completion_queue.cc",
         "src/cpp/common/rpc_method.cc",
         "src/cpp/proto/proto_utils.cc",
         "src/cpp/server/async_server.cc",
         "src/cpp/server/async_server_context.cc",
-        "src/cpp/server/completion_queue.cc",
         "src/cpp/server/server.cc",
         "src/cpp/server/server_builder.cc",
         "src/cpp/server/server_context_impl.cc",
diff --git a/src/cpp/server/completion_queue.cc b/src/cpp/common/completion_queue.cc
similarity index 98%
rename from src/cpp/server/completion_queue.cc
rename to src/cpp/common/completion_queue.cc
index 102a81bf0ebcfdd0a1d4c2acdd4f7e0163e3b583..f06da9b04feb5a90560f6d21a9bea0dba712428e 100644
--- a/src/cpp/server/completion_queue.cc
+++ b/src/cpp/common/completion_queue.cc
@@ -31,7 +31,6 @@
  *
  */
 
-// TODO(yangg) maybe move to internal/common
 #include <grpc++/completion_queue.h>
 
 #include <grpc/grpc.h>