diff --git a/DifferentialEquations.md b/DifferentialEquations.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/dynamicVal_post.py b/dynamicVal_post.py
index da106044fe4954b227f77e4b628861203d3bd2a5..c0fbec24e99f4474fee79b8e8104b0c8aa5fc4e3 100644
--- a/dynamicVal_post.py
+++ b/dynamicVal_post.py
@@ -107,13 +107,13 @@ if __name__ == "__main__":
     X = np.array(X)
     Z = np.array(Z)
 
-    dt = 3.1483100054946037e-7
+    dt = 4 * 3.1483100054946037e-7
     steps = 3000000
     filesteps = steps / nfiles
     dT = dt * filesteps
     t = np.arange(0, dT * nfiles, dT)
     plt.plot(t, 1000 * Z[:, -3:-1])
-    plt.xlim([0, 1])
+    plt.xlim([0, 4])
     plt.xlabel("Time [s]")
     plt.ylabel("Displacement [mm]")
     Sz = np.fft.fft(Z[:, -3:-1], axis=0)
diff --git a/dynamic_validation.md b/dynamic_validation.md
index a8cb4b0723766a5b9e0d99db3ed5fd6fc0d5cc21..93b817f2b66af8b2eb8c3866a96bb5753746c789 100644
--- a/dynamic_validation.md
+++ b/dynamic_validation.md
@@ -1,5 +1,11 @@
 # Validation of MetaVoxels Dynamics
 
+What raised the question?
+
+I put together a tendon model that calculated reactions at each node in the tendon path including friction in the hopes of recreating the experimental data that alfonso acquired. The model has just one parameter, coefficient of friction, and captures the behavior of varying deflection along the beam. But the dynamic behavior seemed very off, the beam doesn't make it to equilibrium and there is a very slow compression wave that travels down the beam under initial loading.
+
+<img src="json/tutorial/output.mp4" /><br></br>
+
 Here's a running notebook of my work to perform validation of the dynamic characteristics of the MetaVoxels beam solver. The key questions are:
 
 1. Are we calculating the mass matrix correctly?
@@ -115,3 +121,11 @@ for node in nodes:
 
 Now this gets messy. The inertia0 term is aligned with the edge coordinates and will return a diagonal array of moments of inertia. When we transform to global coordinates we will (in all but a few cases) get products of inertia or off-diagonal terms in the inertia matrix. To be consistent we should keep these terms and calculate the inverse inertial matrix. Update the nodal rotational velocity then becomes a matrix-vector product of the applied moment and the inertia_inverse matrix. Additionally if we're allowing for large deformations we'll need to recalculate node.inertia and node.inertia_inverse in global coordinates (unless I misunderstand and we do our moment*inertia_inverse in nodal coords before transforming to global coords).
 
+## Validation against voxel beam
+
+I've begun work collecting the impulse response of a cantilevered 5x1 voxel beam. The data shown below was acquired using the microcontroller-imu setup from the voxelcopter, but the next step is setting up the laser displacement sensor for higher rate, non-contact measurement.
+
+<img src="images/voxel_dynamic.png" width=500><br></br>
+
+![](./images/voxel_time_series.png)
+![](./images/voxel_frequency.png)
\ No newline at end of file
diff --git a/images/voxel_dynamic.png b/images/voxel_dynamic.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0b8239067636f5bec26fd1affacb65ff67d8d69
Binary files /dev/null and b/images/voxel_dynamic.png differ
diff --git a/images/voxel_frequency.png b/images/voxel_frequency.png
new file mode 100644
index 0000000000000000000000000000000000000000..90fafcec14c7e477bd0ac47687110fe8dd7fc90f
Binary files /dev/null and b/images/voxel_frequency.png differ
diff --git a/images/voxel_time_series.png b/images/voxel_time_series.png
new file mode 100644
index 0000000000000000000000000000000000000000..aac5705785a28518a399ce32fa10e07f3cf4c20d
Binary files /dev/null and b/images/voxel_time_series.png differ
diff --git a/julia/include/run.jl b/julia/include/run.jl
index 69225a106b7796e4f57f1fe7f18282600c58793c..5c3a6850e96d692c635844480469c07d40473571 100644
--- a/julia/include/run.jl
+++ b/julia/include/run.jl
@@ -413,7 +413,7 @@ function runMetaVoxels!(setup, folderPath, sys="GPU")
 
     E_intForce2 = fill(Vector3(), linkCount)
     E_intMoment2 = fill(Vector3(), linkCount)
-    E_damp = fill(false, linkCount)
+    E_damp = fill(true, linkCount)
     E_smallAngle = fill(true, linkCount)
     E_material = fill(edgeMaterial(), linkCount)
     
@@ -598,7 +598,7 @@ function runMetaVoxels!(setup, folderPath, sys="GPU")
         temp = eHat * E_material[1].b * E_material[1].h / ((0.0 + 1.0) * E_material[1].L)
         MaxFreq2 = temp / mass
     end
-    dt = 1.0 / (6.283185 * sqrt(MaxFreq2))
+    dt = 4.0 / (6.283185 * sqrt(MaxFreq2))
     if (logging)
         println("dt: $dt, s: $s, mass: $mass, momentInertiaInverse: $(N_material[1].momentInertiaInverse)")
     end
@@ -747,4 +747,4 @@ function doTimeStep!(metavoxel, dt, currentTimeStep, sys="GPU")
         )
     end
     
-end
+end
\ No newline at end of file
diff --git a/julia/include/updateEdges.jl b/julia/include/updateEdges.jl
index ae02db5aecd7caf1fba0f0184346f1a58adfd114..a1998b5f06eba80da4c7302e50ec3c7648b3da1f 100644
--- a/julia/include/updateEdges.jl
+++ b/julia/include/updateEdges.jl
@@ -169,7 +169,7 @@ function updateEdges!(sys,i,dt,currentTimeStep,E_source,E_target,E_sourceNodalCo
         
         zeta = 1.0
         dampingM = convert(Float64, E_material[i].dampingM) / dt * 1.0
-        dampingM = 0
+        # dampingM = 0
         dampingMultiplier = Vector3(dampingM, dampingM, dampingM)