diff --git a/puremd_rc_1003/Makefile.am b/puremd_rc_1003/Makefile.am
index 17e5868a0bf0203d99fc98057d87f5dfec233502..42fe77e44b8b51da6ec841ba54df84fdda05419d 100644
--- a/puremd_rc_1003/Makefile.am
+++ b/puremd_rc_1003/Makefile.am
@@ -1,20 +1,20 @@
 ACLOCAL_AMFLAGS = -I m4
 
+SUBDIRS =
+
 if BUILD_S_OMP
-  S_OMP=sPuReMD
+SUBDIRS += sPuReMD
 endif
 if BUILD_MPI
-  MPI=PuReMD
+SUBDIRS += PuReMD
 endif
-if BUILD_SINGLE_GPU
-  SINGLE_GPU=PuReMD-GPU
+if BUILD_GPU
+SUBDIRS += PuReMD-GPU
 endif
-if BUILD_MULTI_GPU
-  MULTI_GPU=PG-PuReMD
+if BUILD_MPI_GPU
+SUBDIRS += PG-PuReMD
 endif
 
-SUBDIRS = $(S_OMP) $(MPI) $(SINGLE_GPU) $(MULTI_GPU)
-
 EXTRA_DIST = doc/README.txt doc/manual.pdf
 
 dist-hook: rm -rf `find $(distdir) -name .git`
diff --git a/puremd_rc_1003/PG-PuReMD/Makefile.am b/puremd_rc_1003/PG-PuReMD/Makefile.am
index af437a64d6d80a47ea903fd842a648fc59cbcd9a..ba8fe5af1959361cee1396593d681575d4e7a284 100644
--- a/puremd_rc_1003/PG-PuReMD/Makefile.am
+++ b/puremd_rc_1003/PG-PuReMD/Makefile.am
@@ -1 +1,62 @@
-SUBDIRS = src
+if BUILD_CUDA
+SUFFIXES = .cu
+include cuda.am
+endif
+
+AM_CFLAGS = -Wall -O3 -funroll-loops -fstrict-aliasing
+AM_CPPFLAGS = -I$(srcdir)
+AM_LDFLAGS  = 
+
+if BUILD_CUDA
+AM_CFLAGS += $(CUDA_CFLAGS)
+AM_CPPFLAGS += $(CUDA_CFLAGS)
+
+# default CUDA nvcc flags
+#   Note: cc 13 for Tesla
+#   Note: cc 20 for Fermi
+#   Note: cc 30 for Kepler K10
+#   Note: cc 35 for Kepler K20
+NVCCFLAGS +=  -D__USE_GPU__ -use_fast_math 
+NVCCFLAGS += -gencode arch=compute_35,code=sm_35 --compiler-options "-O3 -funroll-loops -fstrict-aliasing" -O3
+NVCCFLAGS += --ptxas-options -v
+NVCCFLAGS += --compiler-options -I$(srcdir) 
+NVCCFLAGS += --compiler-options -fno-strict-aliasing
+NVCCFLAGS += --compiler-options -Wno-unused-function
+NVCCFLAGS += --compiler-options -Wno-unused-parameter
+NVCCFLAGS += --compiler-options "$(MPI_CFLAGS)"
+
+#NVCC_LIBS = -lcudart -m64
+endif
+
+
+bin_PROGRAMS = pg-puremd
+pg_puremd_SOURCES = src/allocate.c src/basic_comm.c src/ffield.c src/grid.c src/list.c \
+	src/lookup.c src/io_tools.c src/reset_tools.c src/restart.c src/random.c \
+	src/tool_box.c src/traj.c src/vector.c src/analyze.c src/box.c src/system_props.c \
+	src/control.c src/comm_tools.c src/geo_tools.c src/linear_solvers.c src/neighbors.c \
+	src/qEq.c src/bond_orders.c src/multi_body.c src/bonds.c src/valence_angles.c \
+	src/hydrogen_bonds.c src/torsion_angles.c src/nonbonded.c src/forces.c \
+	src/integrate.c src/init_md.c src/parallelreax.c
+
+if BUILD_CUDA
+pg_puremd_SOURCES += src/cuda_utils.cu src/dev_alloc.cu src/cuda_environment.cu \
+      src/dev_system_props.cu src/reduction.cu src/center_mass.cu \
+      src/cuda_copy.cu src/cuda_reset_tools.cu src/dev_list.cu \
+      src/cuda_neighbors.cu src/cuda_bond_orders.cu src/cuda_bonds.cu \
+      src/cuda_multi_body.cu src/cuda_valence_angles.cu \
+      src/cuda_torsion_angles.cu src/cuda_hydrogen_bonds.cu src/cuda_forces.cu \
+      src/cuda_qEq.cu src/cuda_linear_solvers.cu src/matvec.cu src/dual_matvec.cu \
+      src/cuda_nonbonded.cu src/cuda_integrate.cu src/cuda_post_evolve.cu \
+      src/cuda_init_md.cu src/validation.cu src/cuda_lookup.cu
+
+# dummy source to cause C linking
+nodist_EXTRA_pg_puremd_SOURCES = src/dummy.c
+endif
+
+
+pg_puremd_CFLAGS = $(AM_CFLAGS) $(MPI_CFLAGS)
+pg_puremd_LDFLAGS = $(AM_LDFLAGS) $(MPI_LDFLAGS)
+
+if BUILD_CUDA
+	pg_puremd_LDFLAGS += $(CUDA_LIBS)
+endif
diff --git a/puremd_rc_1003/PG-PuReMD/configure.ac b/puremd_rc_1003/PG-PuReMD/configure.ac
index 03f30bdb059d69d9cd1bc60d075bfada4fd8bee3..a842a8f30b79123c30213d419828cafe19eee87d 100644
--- a/puremd_rc_1003/PG-PuReMD/configure.ac
+++ b/puremd_rc_1003/PG-PuReMD/configure.ac
@@ -4,7 +4,7 @@
 AC_PREREQ([2.69])
 
 AC_INIT([PG-PuReMD], [1.0], [ohearnku@msu.edu hma@msu.edu])
-AM_INIT_AUTOMAKE([1.15 -Wall -Werror foreign])
+AM_INIT_AUTOMAKE([1.15 subdir-objects -Wall -Werror foreign])
 #LT_PREREQ([2.2])
 #LT_INIT([dlopen])
 
@@ -47,18 +47,27 @@ AC_FUNC_STRTOD
 AC_CHECK_FUNCS([gettimeofday memset])
 
 # Check for CUDA support.
-CONFIGURE_HEADLINE([ CUDA support ])
-AX_CUDA
-if test "BUILD_DEBUG" = "true"
-then
-	NVCCFLAGS+=" -g -G"
-else
-	NVCCFLAGS+=" -O3"
+if test "x$BUILD_GPU" = "xyes"; then
+	CONFIGURE_HEADLINE([ CUDA support ])
+	AX_CUDA
+	if test "BUILD_DEBUG" = "true"
+	then
+		NVCCFLAGS+=" -g -G"
+	else
+		NVCCFLAGS+=" -O3"
+	fi
+
+	AC_DEFINE([HAVE_CUDA], [1], [Define to 1 if you have CUDA support enabled.])
 fi
+AM_CONDITIONAL([BUILD_CUDA], [test "x${BUILD_GPU}" = "xyes"])
 
 if test "BUILD_PROF" = "true"
 then
-	NVCCFLAGS+=" --compiler-options ${gprof_flags}"
+	if test "x$BUILD_GPU" = "xyes"; then
+		NVCCFLAGS+=" --compiler-options ${gprof_flags}"
+	else
+		CFLAGS+=" --compiler-options ${gprof_flags}"
+	fi
 fi
 
 # Check for MPI support.
@@ -123,6 +132,6 @@ fi
 AC_SUBST(MPI_CFLAGS)
 AC_SUBST(MPI_LDFLAGS)
 
-AC_CONFIG_FILES([Makefile src/Makefile])
+AC_CONFIG_FILES([Makefile])
 
 AC_OUTPUT
diff --git a/puremd_rc_1003/PG-PuReMD/src/cuda.am b/puremd_rc_1003/PG-PuReMD/cuda.am
similarity index 100%
rename from puremd_rc_1003/PG-PuReMD/src/cuda.am
rename to puremd_rc_1003/PG-PuReMD/cuda.am
diff --git a/puremd_rc_1003/PG-PuReMD/src/Makefile.am b/puremd_rc_1003/PG-PuReMD/src/Makefile.am
deleted file mode 100644
index 941d0b96b6e302cf98cbc6ae3f9a437fd73c3122..0000000000000000000000000000000000000000
--- a/puremd_rc_1003/PG-PuReMD/src/Makefile.am
+++ /dev/null
@@ -1,41 +0,0 @@
-SUFFIXES = .cu
-include cuda.am
-
-AM_CFLAGS = -Wall -O3 -funroll-loops -fstrict-aliasing $(CUDA_CFLAGS)
-AM_CPPFLAGS = -I$(srcdir) $(CUDA_CFLAGS)
-AM_LDFLAGS  = 
-
-# default CUDA nvcc flags
-#   Note: cc 13 for Tesla
-#   Note: cc 20 for Fermi
-#   Note: cc 30 for Kepler K10
-#   Note: cc 35 for Kepler K20
-NVCCFLAGS =  -D__USE_GPU__ -use_fast_math 
-NVCCFLAGS += -gencode arch=compute_35,code=sm_35 --compiler-options "-O3 -funroll-loops -fstrict-aliasing" -O3
-NVCCFLAGS += --ptxas-options -v
-NVCCFLAGS += --compiler-options -I$(srcdir) 
-NVCCFLAGS += --compiler-options -fno-strict-aliasing
-NVCCFLAGS += --compiler-options -Wno-unused-function
-NVCCFLAGS += --compiler-options -Wno-unused-parameter
-NVCCFLAGS += --compiler-options "$(MPI_CFLAGS)"
-
-#NVCC_LIBS = -lcudart -m64
-
-bin_PROGRAMS = pg-puremd
-pg_puremd_SOURCES = allocate.c basic_comm.c ffield.c grid.c list.c lookup.c \
-      io_tools.c reset_tools.c restart.c random.c tool_box.c traj.c \
-      vector.c analyze.c box.c system_props.c control.c comm_tools.c \
-      geo_tools.c linear_solvers.c neighbors.c qEq.c bond_orders.c multi_body.c \
-      bonds.c valence_angles.c hydrogen_bonds.c torsion_angles.c nonbonded.c forces.c \
-      integrate.c init_md.c parallelreax.c cuda_utils.cu dev_alloc.cu cuda_environment.cu \
-      dev_system_props.cu reduction.cu center_mass.cu cuda_copy.cu cuda_reset_tools.cu \
-      dev_list.cu cuda_neighbors.cu cuda_bond_orders.cu cuda_bonds.cu cuda_multi_body.cu \
-      cuda_valence_angles.cu cuda_torsion_angles.cu cuda_hydrogen_bonds.cu cuda_forces.cu \
-      cuda_qEq.cu cuda_linear_solvers.cu matvec.cu dual_matvec.cu cuda_nonbonded.cu \
-      cuda_integrate.cu cuda_post_evolve.cu cuda_init_md.cu validation.cu cuda_lookup.cu
-
-# dummy source to cause C linking
-nodist_EXTRA_pg_puremd_SOURCES = dummy.c
-
-pg_puremd_CFLAGS = $(AM_CFLAGS) $(MPI_CFLAGS)
-pg_puremd_LDFLAGS = $(AM_LDFLAGS) $(MPI_LDFLAGS) $(CUDA_LIBS)
diff --git a/puremd_rc_1003/PG-PuReMD/src/config.h.in b/puremd_rc_1003/PG-PuReMD/src/config.h.in
index be940e5fd76679e18b12825f33d18c823df82371..c3cec65511917d4e3bc016896b760163a8ea8763 100644
--- a/puremd_rc_1003/PG-PuReMD/src/config.h.in
+++ b/puremd_rc_1003/PG-PuReMD/src/config.h.in
@@ -1,5 +1,8 @@
 /* src/config.h.in.  Generated from configure.ac by autoheader.  */
 
+/* Define to 1 if you have CUDA support enabled. */
+#undef HAVE_CUDA
+
 /* Define to 1 if you have the `gettimeofday' function. */
 #undef HAVE_GETTIMEOFDAY
 
diff --git a/puremd_rc_1003/configure.ac b/puremd_rc_1003/configure.ac
index c72022fb0136d015dea33a1f6f1f51eb01b75dd1..5aa29af89e8745021a19ef6e74c592532b4e5b11 100644
--- a/puremd_rc_1003/configure.ac
+++ b/puremd_rc_1003/configure.ac
@@ -25,14 +25,18 @@ AC_ARG_ENABLE([mpi],
 	      [AS_HELP_STRING([--enable-mpi],
 			      [enable MPI support @<:@default: no@:>@])],
 	      [package_mpi_enabled=${enableval}], [package_mpi_enabled=no])
-AC_ARG_ENABLE([mpi-single-gpu],
-	      [AS_HELP_STRING([--enable-mpi-single-gpu],
-			      [enable MPI+CUDA (single GPU) support @<:@default: no@:>@])],
-	      [package_mpi_single_gpu_enabled=${enableval}], [package_mpi_single_gpu_enabled=no])
-AC_ARG_ENABLE([mpi-multi-gpu],
-	      [AS_HELP_STRING([--enable-mpi-multi-gpu],
+AC_ARG_ENABLE([gpu],
+	      [AS_HELP_STRING([--enable-gpu],
+			      [enable CUDA (single GPU) support @<:@default: no@:>@])],
+	      [package_gpu_enabled=${enableval}], [package_gpu_enabled=no])
+AC_ARG_ENABLE([mpi-not-gpu],
+	      [AS_HELP_STRING([--enable-mpi-not-gpu],
+			      [enable MPI but not CUDA support @<:@default: no@:>@])],
+	      [package_mpi_not_gpu_enabled=${enableval}], [package_mpi_not_gpu_enabled=no])
+AC_ARG_ENABLE([mpi-gpu],
+	      [AS_HELP_STRING([--enable-mpi-gpu],
 			      [enable MPI+CUDA (multi GPU) support @<:@default: no@:>@])],
-	      [package_mpi_multi_gpu_enabled=${enableval}], [package_mpi_multi_gpu_enabled=no])
+	      [package_mpi_gpu_enabled=${enableval}], [package_mpi_gpu_enabled=no])
 
 if test "x${package_serial_enabled}" = "xyes" || test "x${package_openmp_enabled}" = "xyes"; then
 	AC_CONFIG_SUBDIRS([sPuReMD])
@@ -47,14 +51,19 @@ if test "x${package_mpi_enabled}" = "xyes"; then
 	AC_CONFIG_SUBDIRS([PuReMD])
 fi
 AM_CONDITIONAL([BUILD_MPI], [test "x${package_mpi_enabled}" = "xyes"])
-if test "x${package_mpi_single_gpu_enabled}" = "xyes"; then
+if test "x${package_gpu_enabled}" = "xyes"; then
 	AC_CONFIG_SUBDIRS([PuReMD-GPU])
 fi
-AM_CONDITIONAL([BUILD_SINGLE_GPU], [test "x${package_mpi_single_gpu_enabled}" = "xyes"])
-if test "x${package_mpi_multi_gpu_enabled}" = "xyes"; then
+AM_CONDITIONAL([BUILD_GPU], [test "x${package_gpu_enabled}" = "xyes"])
+if test "x${package_mpi_not_gpu_enabled}" = "xyes" || test "x${package_mpi_gpu_enabled}" = "xyes"; then
 	AC_CONFIG_SUBDIRS([PG-PuReMD])
+	if test "x${package_mpi_not_gpu_enabled}" = "xyes" || test "x${package_mpi_gpu_enabled}" != "xyes"; then
+		export BUILD_MPI_NOT_GPU="yes"
+	else
+		export BUILD_MPI_NOT_GPU="no"
+	fi
 fi
-AM_CONDITIONAL([BUILD_MULTI_GPU], [test "x${package_mpi_multi_gpu_enabled}" = "xyes"])
+AM_CONDITIONAL([BUILD_MPI_GPU], [test "x${package_mpi_not_gpu_enabled}" = "xyes" || test "x${package_mpi_gpu_enabled}" = "xyes"])
 
 # Provides debug compilation mode.
 AC_ARG_ENABLE([debug],