diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh
index 7c3de72ee0afeb5eba0cfe02af23add61c26d355..1d6bca7b4db59baa1055ead978350d3faa4a9b7b 100644
--- a/src/KOKKOS/Install.sh
+++ b/src/KOKKOS/Install.sh
@@ -151,6 +151,8 @@ action neighbor_kokkos.cpp
 action neighbor_kokkos.h
 action npair_copy_kokkos.cpp
 action npair_copy_kokkos.h
+action npair_halffull_kokkos.cpp
+action npair_halffull_kokkos.h
 action npair_skip_kokkos.cpp
 action npair_skip_kokkos.h
 action npair_kokkos.cpp
diff --git a/src/KOKKOS/npair_halffull_kokkos.cpp b/src/KOKKOS/npair_halffull_kokkos.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..67952fcd628a462085816b7f047dfb7170627088
--- /dev/null
+++ b/src/KOKKOS/npair_halffull_kokkos.cpp
@@ -0,0 +1,125 @@
+/* ----------------------------------------------------------------------
+   LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
+   http://lammps.sandia.gov, Sandia National Laboratories
+   Steve Plimpton, sjplimp@sandia.gov
+
+   Copyright (2003) Sandia Corporation.  Under the terms of Contract
+   DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
+   certain rights in this software.  This software is distributed under
+   the GNU General Public License.
+
+   See the README file in the top-level LAMMPS directory.
+------------------------------------------------------------------------- */
+
+#include "npair_halffull_kokkos.h"
+#include "neighbor.h"
+#include "neigh_list_kokkos.h"
+#include "atom_kokkos.h"
+#include "atom_vec.h"
+#include "molecule.h"
+#include "domain.h"
+#include "my_page.h"
+#include "error.h"
+#include "atom_masks.h"
+
+using namespace LAMMPS_NS;
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType, int NEWTON>
+NPairHalffullKokkos<DeviceType,NEWTON>::NPairHalffullKokkos(LAMMPS *lmp) : NPair(lmp) {
+  atomKK = (AtomKokkos *) atom;
+  execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
+}
+
+/* ----------------------------------------------------------------------
+   build half list from full list
+   pair stored once if i,j are both owned and i < j
+   pair stored by me if j is ghost (also stored by proc owning j)
+   works if full list is a skip list
+   works for owned (non-ghost) list, also for ghost list
+   if ghost, also store neighbors of ghost atoms & set inum,gnum correctly
+------------------------------------------------------------------------- */
+
+template<class DeviceType, int NEWTON>
+void NPairHalffullKokkos<DeviceType,NEWTON>::build(NeighList *list)
+{
+  if (NEWTON) {
+    x = atomKK->k_x.view<DeviceType>();
+    atomKK->sync(execution_space,X_MASK);
+  }
+  nlocal = atom->nlocal;
+
+  NeighListKokkos<DeviceType>* k_list_full = static_cast<NeighListKokkos<DeviceType>*>(list->listfull);
+  d_ilist_full = k_list_full->d_ilist;
+  d_numneigh_full = k_list_full->d_numneigh;
+  d_neighbors_full = k_list_full->d_neighbors;
+  int inum_full = list->listfull->inum;
+  if (list->ghost) inum_full += list->listfull->gnum;
+
+  NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
+  k_list->maxneighs = k_list_full->maxneighs; // simple, but could be made more memory efficient
+  k_list->grow(inum_full);
+  d_ilist = k_list->d_ilist;
+  d_numneigh = k_list->d_numneigh;
+  d_neighbors = k_list->d_neighbors;
+
+  // loop over parent full list
+
+  Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagNPairHalffullCompute>(0,inum_full),*this);
+
+  list->inum = k_list_full->inum;
+  list->gnum = k_list_full->gnum;
+  k_list->k_ilist.template modify<DeviceType>();
+}
+
+template<class DeviceType, int NEWTON>
+KOKKOS_INLINE_FUNCTION
+void NPairHalffullKokkos<DeviceType,NEWTON>::operator()(TagNPairHalffullCompute, const int &ii) const {
+  int n = 0;
+
+  const int i = d_ilist_full(ii);
+  F_FLOAT xtmp,ytmp,ztmp;
+  if (NEWTON) {
+    xtmp = x(i,0);
+    ytmp = x(i,1);
+    ztmp = x(i,2);
+  }
+
+  // loop over full neighbor list
+
+  const int jnum = d_numneigh_full(i);
+  const AtomNeighbors neighbors_i = AtomNeighbors(&d_neighbors(i,0),d_numneigh(i),
+                                                  &d_neighbors(i,1)-&d_neighbors(i,0));
+
+  for (int jj = 0; jj < jnum; jj++) {
+    const int joriginal = d_neighbors_full(i,jj);
+    const int j = joriginal & NEIGHMASK;
+    if (NEWTON) {
+      if (j < nlocal) {
+        if (i > j) continue;
+      } else {
+        if (x(j,2) < ztmp) continue;
+        if (x(j,2) == ztmp) {
+          if (x(j,1) < ytmp) continue;
+          if (x(j,1) == ytmp && x(j,0) < xtmp) continue;
+        }
+      }
+      neighbors_i(n++) = joriginal;
+    } else {
+      if (j > i) neighbors_i(n++) = joriginal;
+    }
+  }
+
+  d_numneigh(i) = n;
+  d_ilist(ii) = i;
+}
+
+namespace LAMMPS_NS {
+template class NPairHalffullKokkos<LMPDeviceType,0>;
+template class NPairHalffullKokkos<LMPDeviceType,1>;
+#ifdef KOKKOS_HAVE_CUDA
+template class NPairHalffullKokkos<LMPHostType,0>;
+template class NPairHalffullKokkos<LMPHostType,1>;
+#endif
+}
diff --git a/src/KOKKOS/npair_halffull_kokkos.h b/src/KOKKOS/npair_halffull_kokkos.h
new file mode 100644
index 0000000000000000000000000000000000000000..f52eff503e5a3b6eb34671c7a9b3066324d1ef58
--- /dev/null
+++ b/src/KOKKOS/npair_halffull_kokkos.h
@@ -0,0 +1,170 @@
+/* -*- c++ -*- ----------------------------------------------------------
+   LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
+   http://lammps.sandia.gov, Sandia National Laboratories
+   Steve Plimpton, sjplimp@sandia.gov
+
+   Copyright (2003) Sandia Corporation.  Under the terms of Contract
+   DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
+   certain rights in this software.  This software is distributed under
+   the GNU General Public License.
+
+   See the README file in the top-level LAMMPS directory.
+------------------------------------------------------------------------- */
+
+#ifdef NPAIR_CLASS
+
+// Newton
+
+typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonDevice;
+NPairStyle(halffull/newton/kk/device,
+           NPairKokkosHalffullNewtonDevice,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost;
+NPairStyle(halffull/newton/kk/host,
+           NPairKokkosHalffullNewtonHost,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_KOKKOS_HOST)
+
+typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonDevice;
+NPairStyle(halffull/newton/skip/kk/device,
+           NPairKokkosHalffullNewtonDevice,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost;
+NPairStyle(halffull/newton/skip/kk/host,
+           NPairKokkosHalffullNewtonHost,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_HOST)
+
+// Newtoff
+
+typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffDevice;
+NPairStyle(halffull/newtoff/kk/device,
+           NPairKokkosHalffullNewtoffDevice,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost;
+NPairStyle(halffull/newtoff/kk/host,
+           NPairKokkosHalffullNewtoffHost,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_KOKKOS_HOST)
+
+typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffDevice;
+NPairStyle(halffull/newtoff/skip/kk/device,
+           NPairKokkosHalffullNewtoffDevice,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost;
+NPairStyle(halffull/newtoff/skip/kk/host,
+           NPairKokkosHalffullNewtoffHost,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_HOST)
+
+//************ Ghost **************
+
+// Newton
+
+typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonGhostDevice;
+NPairStyle(halffull/newton/ghost/kk/device,
+           NPairKokkosHalffullNewtonGhostDevice,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost;
+NPairStyle(halffull/newton/ghost/kk/host,
+           NPairKokkosHalffullNewtonHost,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_HOST)
+
+typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonGhostDevice;
+NPairStyle(halffull/newton/skip/ghost/kk/device,
+           NPairKokkosHalffullNewtonGhostDevice,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost;
+NPairStyle(halffull/newton/skip/ghost/kk/host,
+           NPairKokkosHalffullNewtonHost,
+           NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_HOST)
+
+// Newtoff
+
+typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffGhostDevice;
+NPairStyle(halffull/newtoff/ghost/kk/device,
+           NPairKokkosHalffullNewtoffGhostDevice,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost;
+NPairStyle(halffull/newtoff/ghost/kk/host,
+           NPairKokkosHalffullNewtoffHost,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_HOST)
+
+typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffGhostDevice;
+NPairStyle(halffull/newtoff/skip/ghost/kk/device,
+           NPairKokkosHalffullNewtoffGhostDevice,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_DEVICE)
+
+typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost;
+NPairStyle(halffull/newtoff/skip/ghost/kk/host,
+           NPairKokkosHalffullNewtoffHost,
+           NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI |
+           NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_HOST)
+
+#else
+
+#ifndef LMP_NPAIR_HALFFULL_KOKKOS_H
+#define LMP_NPAIR_HALFFULL_KOKKOS_H
+
+#include "npair.h"
+#include "kokkos_type.h"
+
+namespace LAMMPS_NS {
+
+struct TagNPairHalffullCompute{};
+
+template<class DeviceType, int NEWTON>
+class NPairHalffullKokkos : public NPair {
+ public:
+  typedef DeviceType device_type;
+  typedef ArrayTypes<DeviceType> AT;
+
+  NPairHalffullKokkos(class LAMMPS *);
+  ~NPairHalffullKokkos() {}
+  void build(class NeighList *);
+
+  KOKKOS_INLINE_FUNCTION
+  void operator()(TagNPairHalffullCompute, const int&) const;
+
+ private:
+  int nlocal;
+
+  typename AT::t_x_array_randomread x;
+
+  typename AT::t_neighbors_2d_const d_neighbors_full;
+  typename AT::t_int_1d_const d_ilist_full;
+  typename AT::t_int_1d_const d_numneigh_full;
+
+  typename AT::t_neighbors_2d d_neighbors;
+  typename AT::t_int_1d d_ilist;
+  typename AT::t_int_1d d_numneigh;
+
+  ExecutionSpace execution_space;
+};
+
+}
+
+#endif
+#endif
+
+/* ERROR/WARNING messages:
+
+*/