diff --git a/build.gradle.kts b/build.gradle.kts
index 6d102a77a..10e030520 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -11,6 +11,7 @@ allprojects {
     repositories {
         jcenter()
         maven("https://dl.bintray.com/kotlin/kotlinx")
+        mavenCentral()
     }
 
     group = "scientifik"
diff --git a/kmath-nd4j/build.gradle.kts b/kmath-nd4j/build.gradle.kts
index 5da7d66b7..59354a8f9 100644
--- a/kmath-nd4j/build.gradle.kts
+++ b/kmath-nd4j/build.gradle.kts
@@ -1,3 +1,9 @@
-plugins {
-    id("scientifik.jvm")
+plugins { id("scientifik.jvm") }
+
+dependencies {
+    api(project(":kmath-core"))
+    api("org.nd4j:nd4j-api:1.0.0-beta7")
+    testImplementation("org.deeplearning4j:deeplearning4j-core:1.0.0-beta7")
+    testImplementation("org.nd4j:nd4j-native-platform:1.0.0-beta7")
+    testImplementation("org.slf4j:slf4j-simple:1.7.30")
 }
diff --git a/kmath-nd4j/src/main/kotlin/scientifik.kmath.nd4j/INDArrayScalarsIterator.kt b/kmath-nd4j/src/main/kotlin/scientifik.kmath.nd4j/INDArrayScalarsIterator.kt
new file mode 100644
index 000000000..2c2dc970f
--- /dev/null
+++ b/kmath-nd4j/src/main/kotlin/scientifik.kmath.nd4j/INDArrayScalarsIterator.kt
@@ -0,0 +1,19 @@
+package scientifik.kmath.nd4j
+
+import org.nd4j.linalg.api.ndarray.INDArray
+import org.nd4j.linalg.api.shape.Shape
+
+internal class INDArrayScalarsIterator(private val iterateOver: INDArray) : Iterator<Pair<IntArray, INDArray>> {
+    private var i: Int = 0
+
+    override fun hasNext(): Boolean = i < iterateOver.length()
+
+    override fun next(): Pair<IntArray, INDArray> {
+        val idx = if (iterateOver.ordering() == 'c')
+            Shape.ind2subC(iterateOver, i++.toLong())!!
+        else
+            Shape.ind2sub(iterateOver, i++.toLong())!!
+
+        return narrowToIntArray(idx) to iterateOver.getScalar(*idx)
+    }
+}
diff --git a/kmath-nd4j/src/main/kotlin/scientifik.kmath.nd4j/ND4JStructure.kt b/kmath-nd4j/src/main/kotlin/scientifik.kmath.nd4j/ND4JStructure.kt
new file mode 100644
index 000000000..eb9f9b80c
--- /dev/null
+++ b/kmath-nd4j/src/main/kotlin/scientifik.kmath.nd4j/ND4JStructure.kt
@@ -0,0 +1,14 @@
+package scientifik.kmath.nd4j
+
+import org.nd4j.linalg.api.ndarray.INDArray
+import scientifik.kmath.structures.NDStructure
+
+internal fun narrowToIntArray(la: LongArray): IntArray = IntArray(la.size) { la[it].toInt() }
+
+data class ND4JStructure<T>(val ndArray: INDArray) : NDStructure<INDArray> {
+    override val shape: IntArray
+        get() = narrowToIntArray(ndArray.shape())
+
+    override fun get(index: IntArray): INDArray = ndArray.getScalar(*index)
+    override fun elements(): Sequence<Pair<IntArray, INDArray>> = Sequence { INDArrayScalarsIterator(ndArray) }
+}