diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
new file mode 100644
index 0000000..2144819
--- /dev/null
+++ b/.github/dependabot.yaml
@@ -0,0 +1,8 @@
+# Dependabot configuration file.
+version: 2
+
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "monthly"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2637c50..e42e892 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,4 +1,4 @@
-name: ci
+name: Dart
 
 on:
   push:
@@ -17,8 +17,10 @@
         sdk: [2.14.0, dev]
 
     steps:
-      - uses: actions/checkout@v2.3.4
-      - uses: dart-lang/setup-dart@v1.2
+      # These are the latest versions of the github actions; dependabot will
+      # send PRs to keep these up-to-date.
+      - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
+      - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
         with:
           sdk: ${{ matrix.sdk }}
       - run: dart pub get
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2787efd..5b77c4a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,14 @@
+## 2.1.4
+
+- Refactor the locations of the `SimplexNoise` related part files.
+
 ## 2.1.3
 
 - `operator ==` overrides no longer take nullable arguments. This is only
   visible for classes that implement the interfaces defined in this package
   which no longer need to also widen the argument type.
+- Deprecate `SimplexNoise` (see https:github.com/google/vector_math.dart/issues/270
+  for more information).
 
 ## 2.1.2
 
diff --git a/README.md b/README.md
index 01cff7e..b14069f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,6 @@
-[![CI](https://github.com/google/vector_math.dart/workflows/ci/badge.svg?branch=master)](https://github.com/google/vector_math.dart/actions?query=workflow%3Aci+branch%3Amaster)
+[![Dart](https://github.com/google/vector_math.dart/workflows/ci/badge.svg?branch=master)](https://github.com/google/vector_math.dart/actions?query=workflow%3Aci+branch%3Amaster)
+[![pub package](https://img.shields.io/pub/v/vector_math.svg)](https://pub.dev/packages/vector_math)
+[![package publisher](https://img.shields.io/pub/publisher/vector_math.svg)](https://pub.dev/packages/vector_math/publisher)
 [![Coverage Status](https://coveralls.io/repos/google/vector_math.dart/badge.svg?branch=master)](https://coveralls.io/r/google/vector_math.dart?branch=master)
 
 ## Introduction
@@ -152,15 +154,14 @@
 
 ## Development
 
-To run test cases:
+To run the unit tests:
 
 ```
-~/src/vector_math/> pub run test:test
+~/src/vector_math/> dart test
 ```
 
-To automatically generate the latest version of ```vector_math_64```:
+To automatically generate the latest version of `vector_math_64`:
 
 ```
 ~/src/vector_math/> dart tool/generate_vector_math_64.dart
 ```
-
diff --git a/lib/src/vector_math_64/third_party/noise.dart b/lib/src/vector_math/noise.dart
similarity index 98%
rename from lib/src/vector_math_64/third_party/noise.dart
rename to lib/src/vector_math/noise.dart
index dbbd5b5..32180be 100644
--- a/lib/src/vector_math_64/third_party/noise.dart
+++ b/lib/src/vector_math/noise.dart
@@ -19,13 +19,15 @@
 
 */
 
-part of vector_math_64;
+part of vector_math;
 
 /*
  * This is based on the implementation of Simplex Noise by Stefan Gustavson
  * found at: http://webstaff.itn.liu.se/~stegu/simplexnoise/SimplexNoise.java
  */
 
+@Deprecated('This API will be removed '
+    '(see https:github.com/google/vector_math.dart/issues/270)')
 class SimplexNoise {
   static final List<List<double>> _grad3 = <List<double>>[
     <double>[1.0, 1.0, 0.0],
diff --git a/lib/src/vector_math/third_party/noise.dart b/lib/src/vector_math/third_party/noise.dart
deleted file mode 100644
index 0e78bfb..0000000
--- a/lib/src/vector_math/third_party/noise.dart
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
-  Copyright (C) 2013 Andrew Magill
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-*/
-
-part of vector_math;
-
-/*
- * This is based on the implementation of Simplex Noise by Stefan Gustavson
- * found at: http://webstaff.itn.liu.se/~stegu/simplexnoise/SimplexNoise.java
- */
-
-class SimplexNoise {
-  static final List<List<double>> _grad3 = <List<double>>[
-    <double>[1.0, 1.0, 0.0],
-    <double>[-1.0, 1.0, 0.0],
-    <double>[1.0, -1.0, 0.0],
-    <double>[-1.0, -1.0, 0.0],
-    <double>[1.0, 0.0, 1.0],
-    <double>[-1.0, 0.0, 1.0],
-    <double>[1.0, 0.0, -1.0],
-    <double>[-1.0, 0.0, -1.0],
-    <double>[0.0, 1.0, 1.0],
-    <double>[0.0, -1.0, 1.0],
-    <double>[0.0, 1.0, -1.0],
-    <double>[0.0, -1.0, -1.0]
-  ];
-
-  static final List<List<double>> _grad4 = <List<double>>[
-    <double>[0.0, 1.0, 1.0, 1.0],
-    <double>[0.0, 1.0, 1.0, -1.0],
-    <double>[0.0, 1.0, -1.0, 1.0],
-    <double>[0.0, 1.0, -1.0, -1.0],
-    <double>[0.0, -1.0, 1.0, 1.0],
-    <double>[0.0, -1.0, 1.0, -1.0],
-    <double>[0.0, -1.0, -1.0, 1.0],
-    <double>[0.0, -1.0, -1.0, -1.0],
-    <double>[1.0, 0.0, 1.0, 1.0],
-    <double>[1.0, 0.0, 1.0, -1.0],
-    <double>[1.0, 0.0, -1.0, 1.0],
-    <double>[1.0, 0.0, -1.0, -1.0],
-    <double>[-1.0, 0.0, 1.0, 1.0],
-    <double>[-1.0, 0.0, 1.0, -1.0],
-    <double>[-1.0, 0.0, -1.0, 1.0],
-    <double>[-1.0, 0.0, -1.0, -1.0],
-    <double>[1.0, 1.0, 0.0, 1.0],
-    <double>[1.0, 1.0, 0.0, -1.0],
-    <double>[1.0, -1.0, 0.0, 1.0],
-    <double>[1.0, -1.0, 0.0, -1.0],
-    <double>[-1.0, 1.0, 0.0, 1.0],
-    <double>[-1.0, 1.0, 0.0, -1.0],
-    <double>[-1.0, -1.0, 0.0, 1.0],
-    <double>[-1.0, -1.0, 0.0, -1.0],
-    <double>[1.0, 1.0, 1.0, 0.0],
-    <double>[1.0, 1.0, -1.0, 0.0],
-    <double>[1.0, -1.0, 1.0, 0.0],
-    <double>[1.0, -1.0, -1.0, 0.0],
-    <double>[-1.0, 1.0, 1.0, 0.0],
-    <double>[-1.0, 1.0, -1.0, 0.0],
-    <double>[-1.0, -1.0, 1.0, 0.0],
-    <double>[-1.0, -1.0, -1.0, 0.0]
-  ];
-
-  // To remove the need for index wrapping, double the permutation table length
-  late final List<int> _perm;
-  late final List<int> _permMod12;
-
-  // Skewing and unskewing factors for 2, 3, and 4 dimensions
-  static final _F2 = 0.5 * (math.sqrt(3.0) - 1.0);
-  static final _G2 = (3.0 - math.sqrt(3.0)) / 6.0;
-  static const double _f3 = 1.0 / 3.0;
-  static const double _g3 = 1.0 / 6.0;
-  static final _F4 = (math.sqrt(5.0) - 1.0) / 4.0;
-  static final _G4 = (5.0 - math.sqrt(5.0)) / 20.0;
-
-  double _dot2(List<double> g, double x, double y) => g[0] * x + g[1] * y;
-
-  double _dot3(List<double> g, double x, double y, double z) =>
-      g[0] * x + g[1] * y + g[2] * z;
-
-  double _dot4(List<double> g, double x, double y, double z, double w) =>
-      g[0] * x + g[1] * y + g[2] * z + g[3] * w;
-
-  SimplexNoise([math.Random? r]) {
-    r ??= math.Random();
-    final p = List<int>.generate(256, (_) => r!.nextInt(256), growable: false);
-    _perm = List<int>.generate(p.length * 2, (int i) => p[i % p.length],
-        growable: false);
-    _permMod12 = List<int>.generate(_perm.length, (int i) => _perm[i] % 12,
-        growable: false);
-  }
-
-  double noise2D(double xin, double yin) {
-    double n0, n1, n2; // Noise contributions from the three corners
-    // Skew the input space to determine which simplex cell we're in
-    final s = (xin + yin) * _F2; // Hairy factor for 2D
-    final i = (xin + s).floor();
-    final j = (yin + s).floor();
-    final t = (i + j) * _G2;
-    final X0 = i - t; // Unskew the cell origin back to (x,y) space
-    final Y0 = j - t;
-    final x0 = xin - X0; // The x,y distances from the cell origin
-    final y0 = yin - Y0;
-    // For the 2D case, the simplex shape is an equilateral triangle.
-    // Determine which simplex we are in.
-    int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
-    if (x0 > y0) {
-      i1 = 1;
-      j1 = 0;
-    } // lower triangle, XY order: (0,0)->(1,0)->(1,1)
-    else {
-      i1 = 0;
-      j1 = 1;
-    } // upper triangle, YX order: (0,0)->(0,1)->(1,1)
-    // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
-    // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
-    // c = (3-sqrt(3))/6
-    final x1 =
-        x0 - i1 + _G2; // Offsets for middle corner in (x,y) unskewed coords
-    final y1 = y0 - j1 + _G2;
-    final x2 = x0 -
-        1.0 +
-        2.0 * _G2; // Offsets for last corner in (x,y) unskewed coords
-    final y2 = y0 - 1.0 + 2.0 * _G2;
-    // Work out the hashed gradient indices of the three simplex corners
-    final ii = i & 255;
-    final jj = j & 255;
-    final gi0 = _permMod12[ii + _perm[jj]];
-    final gi1 = _permMod12[ii + i1 + _perm[jj + j1]];
-    final gi2 = _permMod12[ii + 1 + _perm[jj + 1]];
-    // Calculate the contribution from the three corners
-    var t0 = 0.5 - x0 * x0 - y0 * y0;
-    if (t0 < 0) {
-      n0 = 0.0;
-    } else {
-      t0 *= t0;
-      n0 = t0 *
-          t0 *
-          _dot2(_grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
-    }
-    var t1 = 0.5 - x1 * x1 - y1 * y1;
-    if (t1 < 0) {
-      n1 = 0.0;
-    } else {
-      t1 *= t1;
-      n1 = t1 * t1 * _dot2(_grad3[gi1], x1, y1);
-    }
-    var t2 = 0.5 - x2 * x2 - y2 * y2;
-    if (t2 < 0) {
-      n2 = 0.0;
-    } else {
-      t2 *= t2;
-      n2 = t2 * t2 * _dot2(_grad3[gi2], x2, y2);
-    }
-    // Add contributions from each corner to get the final noise value.
-    // The result is scaled to return values in the interval [-1,1].
-    return 70.0 * (n0 + n1 + n2);
-  }
-
-  // 3D simplex noise
-  double noise3D(double xin, double yin, double zin) {
-    double n0, n1, n2, n3; // Noise contributions from the four corners
-    // Skew the input space to determine which simplex cell we're in
-    final s =
-        (xin + yin + zin) * _f3; // Very nice and simple skew factor for 3D
-    final i = (xin + s).floor();
-    final j = (yin + s).floor();
-    final k = (zin + s).floor();
-    final t = (i + j + k) * _g3;
-    final X0 = i - t; // Unskew the cell origin back to (x,y,z) space
-    final Y0 = j - t;
-    final Z0 = k - t;
-    final x0 = xin - X0; // The x,y,z distances from the cell origin
-    final y0 = yin - Y0;
-    final z0 = zin - Z0;
-    // For the 3D case, the simplex shape is a slightly irregular tetrahedron.
-    // Determine which simplex we are in.
-    int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
-    int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
-    if (x0 >= y0) {
-      if (y0 >= z0) {
-        i1 = 1;
-        j1 = 0;
-        k1 = 0;
-        i2 = 1;
-        j2 = 1;
-        k2 = 0;
-      } // X Y Z order
-      else if (x0 >= z0) {
-        i1 = 1;
-        j1 = 0;
-        k1 = 0;
-        i2 = 1;
-        j2 = 0;
-        k2 = 1;
-      } // X Z Y order
-      else {
-        i1 = 0;
-        j1 = 0;
-        k1 = 1;
-        i2 = 1;
-        j2 = 0;
-        k2 = 1;
-      } // Z X Y order
-    } else {
-      // x0<y0
-      if (y0 < z0) {
-        i1 = 0;
-        j1 = 0;
-        k1 = 1;
-        i2 = 0;
-        j2 = 1;
-        k2 = 1;
-      } // Z Y X order
-      else if (x0 < z0) {
-        i1 = 0;
-        j1 = 1;
-        k1 = 0;
-        i2 = 0;
-        j2 = 1;
-        k2 = 1;
-      } // Y Z X order
-      else {
-        i1 = 0;
-        j1 = 1;
-        k1 = 0;
-        i2 = 1;
-        j2 = 1;
-        k2 = 0;
-      } // Y X Z order
-    }
-    // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),
-    // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and
-    // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where
-    // c = 1/6.
-    final x1 = x0 - i1 + _g3; // Offsets for second corner in (x,y,z) coords
-    final y1 = y0 - j1 + _g3;
-    final z1 = z0 - k1 + _g3;
-    final x2 =
-        x0 - i2 + 2.0 * _g3; // Offsets for third corner in (x,y,z) coords
-    final y2 = y0 - j2 + 2.0 * _g3;
-    final z2 = z0 - k2 + 2.0 * _g3;
-    final x3 =
-        x0 - 1.0 + 3.0 * _g3; // Offsets for last corner in (x,y,z) coords
-    final y3 = y0 - 1.0 + 3.0 * _g3;
-    final z3 = z0 - 1.0 + 3.0 * _g3;
-    // Work out the hashed gradient indices of the four simplex corners
-    final ii = i & 255;
-    final jj = j & 255;
-    final kk = k & 255;
-    final gi0 = _permMod12[ii + _perm[jj + _perm[kk]]];
-    final gi1 = _permMod12[ii + i1 + _perm[jj + j1 + _perm[kk + k1]]];
-    final gi2 = _permMod12[ii + i2 + _perm[jj + j2 + _perm[kk + k2]]];
-    final gi3 = _permMod12[ii + 1 + _perm[jj + 1 + _perm[kk + 1]]];
-    // Calculate the contribution from the four corners
-    var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
-    if (t0 < 0) {
-      n0 = 0.0;
-    } else {
-      t0 *= t0;
-      n0 = t0 * t0 * _dot3(_grad3[gi0], x0, y0, z0);
-    }
-    var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
-    if (t1 < 0) {
-      n1 = 0.0;
-    } else {
-      t1 *= t1;
-      n1 = t1 * t1 * _dot3(_grad3[gi1], x1, y1, z1);
-    }
-    var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
-    if (t2 < 0) {
-      n2 = 0.0;
-    } else {
-      t2 *= t2;
-      n2 = t2 * t2 * _dot3(_grad3[gi2], x2, y2, z2);
-    }
-    var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
-    if (t3 < 0) {
-      n3 = 0.0;
-    } else {
-      t3 *= t3;
-      n3 = t3 * t3 * _dot3(_grad3[gi3], x3, y3, z3);
-    }
-    // Add contributions from each corner to get the final noise value.
-    // The result is scaled to stay just inside [-1,1]
-    return 32.0 * (n0 + n1 + n2 + n3);
-  }
-
-  // 4D simplex noise, better simplex rank ordering method 2012-03-09
-  double noise4D(double x, double y, double z, double w) {
-    double n0, n1, n2, n3, n4; // Noise contributions from the five corners
-    // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in
-    final s = (x + y + z + w) * _F4; // Factor for 4D skewing
-    final i = (x + s).floor();
-    final j = (y + s).floor();
-    final k = (z + s).floor();
-    final l = (w + s).floor();
-    final t = (i + j + k + l) * _G4; // Factor for 4D unskewing
-    final X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space
-    final Y0 = j - t;
-    final Z0 = k - t;
-    final W0 = l - t;
-    final x0 = x - X0; // The x,y,z,w distances from the cell origin
-    final y0 = y - Y0;
-    final z0 = z - Z0;
-    final w0 = w - W0;
-    // For the 4D case, the simplex is a 4D shape I won't even try to describe.
-    // To find out which of the 24 possible simplices we're in, we need to
-    // determine the magnitude ordering of x0, y0, z0 and w0.
-    // Six pair-wise comparisons are performed between each possible pair
-    // of the four coordinates, and the results are used to rank the numbers.
-    var rankx = 0;
-    var ranky = 0;
-    var rankz = 0;
-    var rankw = 0;
-    if (x0 > y0) {
-      rankx++;
-    } else {
-      ranky++;
-    }
-    if (x0 > z0) {
-      rankx++;
-    } else {
-      rankz++;
-    }
-    if (x0 > w0) {
-      rankx++;
-    } else {
-      rankw++;
-    }
-    if (y0 > z0) {
-      ranky++;
-    } else {
-      rankz++;
-    }
-    if (y0 > w0) {
-      ranky++;
-    } else {
-      rankw++;
-    }
-    if (z0 > w0) {
-      rankz++;
-    } else {
-      rankw++;
-    }
-    int i1, j1, k1, l1; // The integer offsets for the second simplex corner
-    int i2, j2, k2, l2; // The integer offsets for the third simplex corner
-    int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner
-    // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.
-    // Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w
-    // impossible. Only the 24 indices which have non-zero entries make any sense.
-    // We use a thresholding to set the coordinates in turn from the largest magnitude.
-    // Rank 3 denotes the largest coordinate.
-    i1 = rankx >= 3 ? 1 : 0;
-    j1 = ranky >= 3 ? 1 : 0;
-    k1 = rankz >= 3 ? 1 : 0;
-    l1 = rankw >= 3 ? 1 : 0;
-    // Rank 2 denotes the second largest coordinate.
-    i2 = rankx >= 2 ? 1 : 0;
-    j2 = ranky >= 2 ? 1 : 0;
-    k2 = rankz >= 2 ? 1 : 0;
-    l2 = rankw >= 2 ? 1 : 0;
-    // Rank 1 denotes the second smallest coordinate.
-    i3 = rankx >= 1 ? 1 : 0;
-    j3 = ranky >= 1 ? 1 : 0;
-    k3 = rankz >= 1 ? 1 : 0;
-    l3 = rankw >= 1 ? 1 : 0;
-    // The fifth corner has all coordinate offsets = 1, so no need to compute that.
-    final x1 = x0 - i1 + _G4; // Offsets for second corner in (x,y,z,w) coords
-    final y1 = y0 - j1 + _G4;
-    final z1 = z0 - k1 + _G4;
-    final w1 = w0 - l1 + _G4;
-    final x2 =
-        x0 - i2 + 2.0 * _G4; // Offsets for third corner in (x,y,z,w) coords
-    final y2 = y0 - j2 + 2.0 * _G4;
-    final z2 = z0 - k2 + 2.0 * _G4;
-    final w2 = w0 - l2 + 2.0 * _G4;
-    final x3 =
-        x0 - i3 + 3.0 * _G4; // Offsets for fourth corner in (x,y,z,w) coords
-    final y3 = y0 - j3 + 3.0 * _G4;
-    final z3 = z0 - k3 + 3.0 * _G4;
-    final w3 = w0 - l3 + 3.0 * _G4;
-    final x4 =
-        x0 - 1.0 + 4.0 * _G4; // Offsets for last corner in (x,y,z,w) coords
-    final y4 = y0 - 1.0 + 4.0 * _G4;
-    final z4 = z0 - 1.0 + 4.0 * _G4;
-    final w4 = w0 - 1.0 + 4.0 * _G4;
-    // Work out the hashed gradient indices of the five simplex corners
-    final ii = i & 255;
-    final jj = j & 255;
-    final kk = k & 255;
-    final ll = l & 255;
-    final gi0 = _perm[ii + _perm[jj + _perm[kk + _perm[ll]]]] % 32;
-    final gi1 =
-        _perm[ii + i1 + _perm[jj + j1 + _perm[kk + k1 + _perm[ll + l1]]]] % 32;
-    final gi2 =
-        _perm[ii + i2 + _perm[jj + j2 + _perm[kk + k2 + _perm[ll + l2]]]] % 32;
-    final gi3 =
-        _perm[ii + i3 + _perm[jj + j3 + _perm[kk + k3 + _perm[ll + l3]]]] % 32;
-    final gi4 =
-        _perm[ii + 1 + _perm[jj + 1 + _perm[kk + 1 + _perm[ll + 1]]]] % 32;
-    // Calculate the contribution from the five corners
-    var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
-    if (t0 < 0) {
-      n0 = 0.0;
-    } else {
-      t0 *= t0;
-      n0 = t0 * t0 * _dot4(_grad4[gi0], x0, y0, z0, w0);
-    }
-    var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
-    if (t1 < 0) {
-      n1 = 0.0;
-    } else {
-      t1 *= t1;
-      n1 = t1 * t1 * _dot4(_grad4[gi1], x1, y1, z1, w1);
-    }
-    var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
-    if (t2 < 0) {
-      n2 = 0.0;
-    } else {
-      t2 *= t2;
-      n2 = t2 * t2 * _dot4(_grad4[gi2], x2, y2, z2, w2);
-    }
-    var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
-    if (t3 < 0) {
-      n3 = 0.0;
-    } else {
-      t3 *= t3;
-      n3 = t3 * t3 * _dot4(_grad4[gi3], x3, y3, z3, w3);
-    }
-    var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
-    if (t4 < 0) {
-      n4 = 0.0;
-    } else {
-      t4 *= t4;
-      n4 = t4 * t4 * _dot4(_grad4[gi4], x4, y4, z4, w4);
-    }
-    // Sum up and scale the result to cover the range [-1,1]
-    return 27.0 * (n0 + n1 + n2 + n3 + n4);
-  }
-}
diff --git a/lib/src/vector_math_64/third_party/noise.dart b/lib/src/vector_math_64/noise.dart
similarity index 98%
copy from lib/src/vector_math_64/third_party/noise.dart
copy to lib/src/vector_math_64/noise.dart
index dbbd5b5..1980dd3 100644
--- a/lib/src/vector_math_64/third_party/noise.dart
+++ b/lib/src/vector_math_64/noise.dart
@@ -25,7 +25,8 @@
  * This is based on the implementation of Simplex Noise by Stefan Gustavson
  * found at: http://webstaff.itn.liu.se/~stegu/simplexnoise/SimplexNoise.java
  */
-
+@Deprecated('This API will be removed '
+    '(see https:github.com/google/vector_math.dart/issues/270)')
 class SimplexNoise {
   static final List<List<double>> _grad3 = <List<double>>[
     <double>[1.0, 1.0, 0.0],
diff --git a/lib/vector_math.dart b/lib/vector_math.dart
index 92ed0b5..5a74df3 100644
--- a/lib/vector_math.dart
+++ b/lib/vector_math.dart
@@ -11,14 +11,13 @@
 /// [Quad], [Ray], [Sphere] and [Triangle]).
 ///
 /// In addition some utilities are available as color operations (See [Colors]
-/// class), noise generators ([SimplexNoise]) and common OpenGL operations
-/// (like [makeViewMatrix], [makePerspectiveMatrix], or [pickRay]).
+/// class) and common OpenGL operations (like [makeViewMatrix],
+/// [makePerspectiveMatrix], or [pickRay]).
 library vector_math;
 
 import 'dart:math' as math;
 import 'dart:typed_data';
 
-part 'src/vector_math/utilities.dart';
 part 'src/vector_math/aabb2.dart';
 part 'src/vector_math/aabb3.dart';
 part 'src/vector_math/colors.dart';
@@ -29,6 +28,7 @@
 part 'src/vector_math/matrix2.dart';
 part 'src/vector_math/matrix3.dart';
 part 'src/vector_math/matrix4.dart';
+part 'src/vector_math/noise.dart';
 part 'src/vector_math/obb3.dart';
 part 'src/vector_math/opengl.dart';
 part 'src/vector_math/plane.dart';
@@ -36,8 +36,8 @@
 part 'src/vector_math/quaternion.dart';
 part 'src/vector_math/ray.dart';
 part 'src/vector_math/sphere.dart';
-part 'src/vector_math/third_party/noise.dart';
 part 'src/vector_math/triangle.dart';
+part 'src/vector_math/utilities.dart';
 part 'src/vector_math/vector.dart';
 part 'src/vector_math/vector2.dart';
 part 'src/vector_math/vector3.dart';
diff --git a/lib/vector_math_64.dart b/lib/vector_math_64.dart
index 74d6066..203096e 100644
--- a/lib/vector_math_64.dart
+++ b/lib/vector_math_64.dart
@@ -11,14 +11,13 @@
 /// [Quad], [Ray], [Sphere] and [Triangle]).
 ///
 /// In addition some utilities are available as color operations (See [Colors]
-/// class), noise generators ([SimplexNoise]) and common OpenGL operations
-/// (like [makeViewMatrix], [makePerspectiveMatrix], or [pickRay]).
+/// class) and common OpenGL operations (like [makeViewMatrix],
+/// [makePerspectiveMatrix], or [pickRay]).
 library vector_math_64;
 
 import 'dart:math' as math;
 import 'dart:typed_data';
 
-part 'src/vector_math_64/utilities.dart';
 part 'src/vector_math_64/aabb2.dart';
 part 'src/vector_math_64/aabb3.dart';
 part 'src/vector_math_64/colors.dart';
@@ -29,6 +28,7 @@
 part 'src/vector_math_64/matrix2.dart';
 part 'src/vector_math_64/matrix3.dart';
 part 'src/vector_math_64/matrix4.dart';
+part 'src/vector_math_64/noise.dart';
 part 'src/vector_math_64/obb3.dart';
 part 'src/vector_math_64/opengl.dart';
 part 'src/vector_math_64/plane.dart';
@@ -36,8 +36,8 @@
 part 'src/vector_math_64/quaternion.dart';
 part 'src/vector_math_64/ray.dart';
 part 'src/vector_math_64/sphere.dart';
-part 'src/vector_math_64/third_party/noise.dart';
 part 'src/vector_math_64/triangle.dart';
+part 'src/vector_math_64/utilities.dart';
 part 'src/vector_math_64/vector.dart';
 part 'src/vector_math_64/vector2.dart';
 part 'src/vector_math_64/vector3.dart';
diff --git a/pubspec.yaml b/pubspec.yaml
index ea1e74c..88bbe60 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: vector_math
-version: 2.1.3
+version: 2.1.4
 description: A Vector Math library for 2D and 3D applications.
 repository: https://github.com/google/vector_math.dart
 
diff --git a/test/noise_test.dart b/test/noise_test.dart
index b6aba27..6368113 100644
--- a/test/noise_test.dart
+++ b/test/noise_test.dart
@@ -2,6 +2,8 @@
 // All rights reserved. Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// ignore_for_file: deprecated_member_use_from_same_package
+
 import 'package:test/test.dart';
 
 import 'package:vector_math/vector_math.dart';