diff --git a/pom.xml b/pom.xml
index a31adf2d571a73db7b31fc477c0af8e34e02cf18..8d1935148ba274f44b6b915e5d99725dff65d83d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,6 +74,11 @@
 			<artifactId>jdom2</artifactId>
 			<version>2.0.5</version>
 		</dependency>
+		<dependency>
+			<groupId>java3d</groupId>
+			<artifactId>vecmath</artifactId>
+			<version>1.3.1</version>
+		</dependency>
 	</dependencies>
 
 	<developers>
diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileIntAccess.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileIntAccess.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ba03c3f7bc29755db9fad6ab8aabf92abb58db0
--- /dev/null
+++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/VolatileIntAccess.java
@@ -0,0 +1,10 @@
+package net.imglib2.img.basictypeaccess.volatiles;
+
+import net.imglib2.img.basictypeaccess.IntAccess;
+
+/**
+ * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org>
+ * @author Tobias Pietzsch <tobias.pietzsch@gmail.com>
+ */
+public interface VolatileIntAccess extends IntAccess, VolatileAccess
+{}
diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/AbstractVolatileArray.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/AbstractVolatileArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e9a59805ba4ada51538f717cc735f0abea82f37
--- /dev/null
+++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/AbstractVolatileArray.java
@@ -0,0 +1,29 @@
+package net.imglib2.img.basictypeaccess.volatiles.array;
+
+import net.imglib2.img.basictypeaccess.array.ArrayDataAccess;
+import net.imglib2.img.basictypeaccess.array.ShortArray;
+import net.imglib2.img.basictypeaccess.volatiles.VolatileAccess;
+
+/**
+ * A {@link ShortArray} with an {@link #isValid()} flag.
+ *
+ * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org>
+ * @author Tobias Pietzsch <tobias.pietzsch@gmail.com>
+ */
+public abstract class AbstractVolatileArray< T extends AbstractVolatileArray< T > > implements ArrayDataAccess< T >, VolatileAccess
+{
+	private static final long serialVersionUID = -3233057138272085300L;
+	
+	protected final boolean isValid;
+
+	public AbstractVolatileArray( final boolean isValid )
+	{
+		this.isValid = isValid;
+	}
+	
+	@Override
+	public boolean isValid()
+	{
+		return isValid;
+	}
+}
diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileIntArray.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileIntArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..93d8473fe32814c3004059714d7215b876f886a4
--- /dev/null
+++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileIntArray.java
@@ -0,0 +1,53 @@
+package net.imglib2.img.basictypeaccess.volatiles.array;
+
+import net.imglib2.img.basictypeaccess.array.ShortArray;
+import net.imglib2.img.basictypeaccess.volatiles.VolatileIntAccess;
+
+/**
+ * A {@link ShortArray} with an {@link #isValid()} flag.
+ *
+ * @author Stephan Saalfeld <saalfelds@janelia.hhmi.org>
+ * @author Tobias Pietzsch <tobias.pietzsch@gmail.com>
+ */
+public class VolatileIntArray extends AbstractVolatileArray< VolatileIntArray > implements VolatileIntAccess
+{
+	private static final long serialVersionUID = -5626240246651573531L;
+	
+	protected int[] data;
+
+	public VolatileIntArray( final int numEntities, final boolean isValid )
+	{
+		super( isValid );
+		this.data = new int[ numEntities ];
+	}
+
+	public VolatileIntArray( final int[] data, final boolean isValid )
+	{
+		super( isValid );
+		this.data = data;
+	}
+
+	@Override
+	public int getValue( final int index )
+	{
+		return data[ index ];
+	}
+
+	@Override
+	public void setValue( final int index, final int value )
+	{
+		data[ index ] = value;
+	}
+
+	@Override
+	public VolatileIntArray createArray( final int numEntities )
+	{
+		return new VolatileIntArray( numEntities, true );
+	}
+
+	@Override
+	public int[] getCurrentStorageArray()
+	{
+		return data;
+	}
+}
diff --git a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java
index a51776ada70ad7ff1a45cd56d1841c009c8f9433..869d891bde599252ddf00a5acf99fbcc19cf62ec 100644
--- a/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java
+++ b/src/main/java/net/imglib2/img/basictypeaccess/volatiles/array/VolatileShortArray.java
@@ -1,6 +1,5 @@
 package net.imglib2.img.basictypeaccess.volatiles.array;
 
-import net.imglib2.img.basictypeaccess.array.ArrayDataAccess;
 import net.imglib2.img.basictypeaccess.array.ShortArray;
 import net.imglib2.img.basictypeaccess.volatiles.VolatileShortAccess;
 
@@ -9,22 +8,20 @@ import net.imglib2.img.basictypeaccess.volatiles.VolatileShortAccess;
  *
  * @author Tobias Pietzsch <tobias.pietzsch@gmail.com>
  */
-public class VolatileShortArray implements VolatileShortAccess, ArrayDataAccess< VolatileShortArray >
+public class VolatileShortArray extends AbstractVolatileArray< VolatileShortArray > implements VolatileShortAccess
 {
-	private final boolean isValid;
-
 	protected short data[];
 
 	public VolatileShortArray( final int numEntities, final boolean isValid )
 	{
+		super( isValid );
 		this.data = new short[ numEntities ];
-		this.isValid = isValid;
 	}
 
 	public VolatileShortArray( final short[] data, final boolean isValid )
 	{
+		super( isValid );
 		this.data = data;
-		this.isValid = isValid;
 	}
 
 	@Override
@@ -50,10 +47,4 @@ public class VolatileShortArray implements VolatileShortAccess, ArrayDataAccess<
 	{
 		return data;
 	}
-
-	@Override
-	public boolean isValid()
-	{
-		return isValid;
-	}
 }