diff --git a/fortran_examples/test_n2.F90 b/fortran_examples/test_n2.F90
new file mode 100644
index 0000000000000000000000000000000000000000..10b0c1bb270e411f9c27ba0e16c6302a26703132
--- /dev/null
+++ b/fortran_examples/test_n2.F90
@@ -0,0 +1,174 @@
+!*******************************************************************************
+!* This file is part of QuickSched.
+! * Coypright (c) 2017 Aidan Chalk (aidan.chalk@stfc.ac.uk)
+! *
+! * This program is free software: you can redistribute it and/or modify
+! * it under the terms of the GNU Lesser General Public License as published
+! * by the Free Software Foundation, either version 3 of the License, or
+! * (at your option) any later version.
+! *
+! * This program is distributed in the hope that it will be useful,
+! * but WITHOUT ANY WARRANTY; without even the implied warranty of
+! * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! * GNU General Public License for more details.
+! *
+! * You should have received a copy of the GNU Lesser General Public License
+! * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+! *
+! ******************************************************************************/
+
+Module parts
+Use, Intrinsic :: ISO_C_BINDING
+Implicit None
+
+  Integer, Parameter :: sp = Selected_Real_Kind(6,37)    ! single real
+  Integer, Parameter :: dp = Selected_Real_Kind(15,307)  ! double real
+  Integer(Kind=C_INT), Parameter :: type_self=1, type_pair=2
+
+Type Cell
+
+Real(Kind=dp), dimension(:), Allocatable :: fx, fy, fz, dx, dy, dz
+Integer :: num_parts
+
+
+
+End Type Cell
+
+Type(Cell), Dimension(:), Allocatable :: cells
+
+Contains
+
+Subroutine Interact_single(cell_i)
+Integer :: i,j
+
+End Subroutine
+
+Subroutine Interact(cell_i, cell_j)
+
+Integer, Intent(in) :: cell_i, cell_j
+
+Integer :: i, j
+Real(Kind=dp) :: xx, yy, zz, r, f, ir, ir6, ir12, fxx, fyy, fzz, fix, fiy, fiz
+
+
+
+do i=1,cells(cell_i)%num_parts
+  fix = 0.0_dp
+  fiy = 0.0_dp
+  fiz = 0.0_dp
+  do j=1, cells(cell_j)%num_parts
+
+    xx = cells(cell_i)%dx(i) - cells(cell_j)%dx(j)
+    yy = cells(cell_i)%dy(i) - cells(cell_j)%dy(j)
+    zz = cells(cell_i)%dz(i) - cells(cell_j)%dz(j)
+
+    r = xx*xx + yy*yy + zz*zz
+    r = sqrt(r)
+    ir = 0.1_dp/r
+    ir6 = ir*ir
+    ir6 = ir6*ir6*ir6
+    ir12 = ir6*ir6
+    
+    f = 4.0_dp* (ir12-ir6)
+    fxx = f * xx
+    fyy = f * yy
+    fzz = f * zz 
+
+    fix = fix + fxx
+    fiy = fiy + fyy
+    fiz = fiz + fzz
+
+    cells(cell_j)%fx(j) = cells(cell_j)%fx(j) - fxx
+    cells(cell_j)%fy(j) = cells(cell_j)%fy(j) - fyy
+    cells(cell_j)%fz(j) = cells(cell_j)%fz(j) - fzz
+  end do
+  cells(cell_i)%fx(i) = cells(cell_i)%fx(i) + fix
+  cells(cell_i)%fy(i) = cells(cell_i)%fy(i) + fiy
+  cells(cell_i)%fz(i) = cells(cell_i)%fz(i) + fiz
+end do
+
+End Subroutine
+
+Subroutine init_cells(cell_num, count)
+Integer, Intent(in) :: cell_num, count
+
+Allocate(cells(cell_num)%fx(1:count))
+Allocate(cells(cell_num)%fy(1:count))
+Allocate(cells(cell_num)%fz(1:count))
+Allocate(cells(cell_num)%dx(1:count))
+Allocate(cells(cell_num)%dy(1:count))
+Allocate(cells(cell_num)%dz(1:count))
+
+cells(cell_num)%fx = 0.0_dp
+cells(cell_num)%fy = 0.0_dp
+cells(cell_num)%fz = 0.0_dp
+
+Call Random_Number(cells(cell_num)%dx)
+Call Random_Number(cells(cell_num)%dy)
+Call Random_Number(cells(cell_num)%dz)
+
+dx = dx * 10.0_dp
+dy = dy * 10.0_dp
+dz = dz * 10.0_dp
+
+End Subroutine init_cells
+
+Subroutine runner(typ, data) BIND(C)
+Use, Intrinsic :: ISO_C_BINDING
+Use quicksched
+Implicit None
+
+Integer(Kind=C_INT), VALUE :: typ
+Type(C_PTR), VALUE :: data
+Integer(Kind=C_INT), Pointer :: c(:)
+
+call c_f_pointer(data, c, [2])
+
+If(typ == type_self) then
+
+else
+call Interact(c(1), c(2))
+end if
+
+End Subroutine runner
+
+End Module parts
+
+
+Program main
+Use, Intrinsic :: ISO_C_BINDING
+Use quicksched
+Use parts
+Implicit None
+Integer(Kind=C_INT) :: i,j, temp
+Type(C_PTR) :: sched
+Integer(Kind=C_INT), Target :: data(0:10)
+Type(C_PTR) :: dta_ptr
+Integer(Kind=C_INT), Dimension(1:1000) :: cell_res
+
+Allocate(cells(1:1000))
+do i = 1, 1000
+  call cell_init(i, 1000)
+end do
+
+sched = f_qsched_create()
+call qsched_init(qsched, 24, 0)
+
+do i=1, 1000
+ cell_res(i) = qsched_addres(qsched, qsched_owner_none, qsched_res_none) 
+end do
+
+do i=1, 1000
+  data
+  do j=i+1, 1000
+
+  end do
+end do
+
+
+
+
+
+
+
+end Program