diff --git a/src/GRANULAR/fix_freeze.h b/src/GRANULAR/fix_freeze.h
index 52badc3e1bed7a2aa35c0fdcf61c0673d3292f16..a249226aa7840d335924088919ea765af7996776 100644
--- a/src/GRANULAR/fix_freeze.h
+++ b/src/GRANULAR/fix_freeze.h
@@ -34,7 +34,7 @@ class FixFreeze : public Fix {
   void post_force_respa(int, int, int);
   double compute_vector(int);
 
- private:
+ protected:
   int force_flag;
   double foriginal[3],foriginal_all[3];
 };
diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh
index 58a17833c868afcdd1b7300eb8fa0aa867f04ad3..a75281cd20f104f277a8447796a787ddd5e9878f 100755
--- a/src/KOKKOS/Install.sh
+++ b/src/KOKKOS/Install.sh
@@ -97,6 +97,8 @@ action fix_deform_kokkos.cpp
 action fix_deform_kokkos.h
 action fix_eos_table_rx_kokkos.cpp fix_eos_table_rx.cpp
 action fix_eos_table_rx_kokkos.h fix_eos_table_rx.h  
+action fix_freeze_kokkos.cpp
+action fix_freeze_kokkos.h
 action fix_gravity_kokkos.cpp
 action fix_gravity_kokkos.h
 action fix_langevin_kokkos.cpp
diff --git a/src/KOKKOS/fix_freeze_kokkos.cpp b/src/KOKKOS/fix_freeze_kokkos.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b87ec86f8f5c28ab4afe97a0c2e4d2cb9f0d1507
--- /dev/null
+++ b/src/KOKKOS/fix_freeze_kokkos.cpp
@@ -0,0 +1,124 @@
+/* ----------------------------------------------------------------------
+   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 "fix_freeze_kokkos.h"
+#include "atom_masks.h"
+#include "atom_kokkos.h"
+
+using namespace LAMMPS_NS;
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+FixFreezeKokkos<DeviceType>::FixFreezeKokkos(LAMMPS *lmp, int narg, char **arg) :
+  FixFreeze(lmp, narg, arg)
+{
+  kokkosable = 1;
+  atomKK = (AtomKokkos *)atom;
+  execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
+
+  datamask_read = F_MASK | MASK_MASK;
+  datamask_modify = F_MASK | TORQUE_MASK;
+}
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+int FixFreezeKokkos<DeviceType>::setmask()
+{
+  return FixFreeze::setmask();
+}
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+void FixFreezeKokkos<DeviceType>::init()
+{
+  FixFreeze::init();
+}
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+void FixFreezeKokkos<DeviceType>::setup(int vflag)
+{
+  FixFreeze::setup(vflag);
+}
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+void FixFreezeKokkos<DeviceType>::post_force(int vflag)
+{
+  atomKK->sync(execution_space,datamask_read);
+  atomKK->modified(execution_space,datamask_modify);
+
+  f = atomKK->k_f.view<DeviceType>();
+  torque = atomKK->k_torque.view<DeviceType>();
+  mask = atomKK->k_mask.view<DeviceType>();
+
+  int nlocal = atom->nlocal;
+  if (igroup == atom->firstgroup) nlocal = atom->nfirst;
+
+  force_flag = 0;
+  copymode = 1;
+  OriginalForce original;
+  Kokkos::parallel_reduce(nlocal, *this, original);
+  copymode = 0;
+  
+  foriginal[0] = original.values[0];
+  foriginal[1] = original.values[1];
+  foriginal[2] = original.values[2];
+}
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+void FixFreezeKokkos<DeviceType>::post_force_respa(int vflag, int ilevel, int iloop)
+{
+  post_force(vflag);
+}
+
+/* ----------------------------------------------------------------------
+   return components of total force on fix group before force was changed
+------------------------------------------------------------------------- */
+
+template<class DeviceType>
+double FixFreezeKokkos<DeviceType>::compute_vector(int n)
+{
+  return FixFreeze::compute_vector(n);
+}
+
+/* ---------------------------------------------------------------------- */
+
+template<class DeviceType>
+void FixFreezeKokkos<DeviceType>::operator()(const int i, OriginalForce &original) const {
+  if (mask[i] & groupbit) {
+    original.values[0] += f(i,0);
+    original.values[1] += f(i,1);
+    original.values[2] += f(i,2);
+    f(i,0) = 0.0;
+    f(i,1) = 0.0;
+    f(i,2) = 0.0;
+    torque(i,0) = 0.0;
+    torque(i,1) = 0.0;
+    torque(i,2) = 0.0;
+  }
+}
+
+namespace LAMMPS_NS {
+template class FixFreezeKokkos<LMPDeviceType>;
+#ifdef KOKKOS_HAVE_CUDA
+template class FixFreezeKokkos<LMPHostType>;
+#endif
+}
diff --git a/src/KOKKOS/fix_freeze_kokkos.h b/src/KOKKOS/fix_freeze_kokkos.h
new file mode 100644
index 0000000000000000000000000000000000000000..3ad341d0876f7d7971211275e7d0b64df422b854
--- /dev/null
+++ b/src/KOKKOS/fix_freeze_kokkos.h
@@ -0,0 +1,80 @@
+/* -*- 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 FIX_CLASS
+
+FixStyle(freeze/kk,FixFreezeKokkos<LMPDeviceType>)
+FixStyle(freeze/kk/device,FixFreezeKokkos<LMPDeviceType>)
+FixStyle(freeze/kk/host,FixFreezeKokkos<LMPHostType>)
+
+#else
+
+#ifndef LMP_FIX_FREEZE_KOKKOS_H
+#define LMP_FIX_FREEZE_KOKKOS_H
+
+#include "fix_freeze.h"
+#include "kokkos_type.h"
+
+namespace LAMMPS_NS {
+  
+template<class DeviceType>
+class FixFreezeKokkos : public FixFreeze {
+ public:
+  struct OriginalForce {
+    double values[3];
+
+    KOKKOS_INLINE_FUNCTION
+    OriginalForce() {
+      values[0] = 0;
+      values[1] = 0;
+      values[2] = 0;
+    }
+
+    KOKKOS_INLINE_FUNCTION
+    OriginalForce &operator+=(const OriginalForce &rhs) {
+      values[0] += rhs.values[0];
+      values[1] += rhs.values[1];
+      values[2] += rhs.values[2];
+      return *this;
+    }
+
+    KOKKOS_INLINE_FUNCTION
+    volatile OriginalForce &operator+=(const volatile OriginalForce &rhs) volatile {
+      values[0] += rhs.values[0];
+      values[1] += rhs.values[1];
+      values[2] += rhs.values[2];
+      return *this;
+    }
+  };
+
+  FixFreezeKokkos(class LAMMPS *, int, char **);
+  int setmask();
+  void init();
+  void setup(int);
+  void post_force(int);
+  void post_force_respa(int, int, int);
+  double compute_vector(int);
+
+  KOKKOS_INLINE_FUNCTION
+  void operator()(const int i, OriginalForce &original) const;
+  
+ private:
+  typename ArrayTypes<DeviceType>::t_f_array f;
+  typename ArrayTypes<DeviceType>::t_f_array torque;
+  typename ArrayTypes<DeviceType>::t_int_1d mask;
+};
+
+} // namespace LAMMPS_NS
+
+#endif // LMP_FIX_FREEZE_KOKKOS_H
+#endif // FIX_CLASS