diff --git a/bower.json b/bower.json
index 161ee04186..ed3dbaf899 100644
--- a/bower.json
+++ b/bower.json
@@ -22,7 +22,6 @@
     "eventemitter3": "^1.2.0",
     "lodash": "3.10.1",
     "almond": "~0.3.2",
-    "d3": "~4.1.0",
     "html2canvas": "^0.4.1"
   }
 }
diff --git a/karma.conf.js b/karma.conf.js
index 84909b42a7..f4bd0a10b5 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -35,6 +35,7 @@ module.exports = function(config) {
         // By default, files are also included in a script tag.
         files: [
             {pattern: 'bower_components/**/*.js', included: false},
+            {pattern: 'node_modules/d3-*/**/*.js', included: false},
             {pattern: 'src/**/*.js', included: false},
             {pattern: 'example/**/*.js', included: false},
             {pattern: 'example/**/*.json', included: false},
diff --git a/openmct.js b/openmct.js
index 68151008cd..3084f96a4d 100644
--- a/openmct.js
+++ b/openmct.js
@@ -38,7 +38,16 @@ requirejs.config({
         "uuid": "bower_components/node-uuid/uuid",
         "zepto": "bower_components/zepto/zepto.min",
         "lodash": "bower_components/lodash/lodash",
-        "d3": "bower_components/d3/d3.min"
+        "d3-selection": "node_modules/d3-selection/build/d3-selection.min",
+        "d3-scale": "node_modules/d3-scale/build/d3-scale.min",
+        "d3-axis": "node_modules/d3-axis/build/d3-axis.min",
+        "d3-array": "node_modules/d3-array/build/d3-array.min",
+        "d3-collection": "node_modules/d3-collection/build/d3-collection.min",
+        "d3-color": "node_modules/d3-color/build/d3-color.min",
+        "d3-format": "node_modules/d3-format/build/d3-format.min",
+        "d3-interpolate": "node_modules/d3-interpolate/build/d3-interpolate.min",
+        "d3-time": "node_modules/d3-time/build/d3-time.min",
+        "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min",
     },
     "shim": {
         "angular": {
@@ -65,8 +74,15 @@ requirejs.config({
         "lodash": {
             "exports": "lodash"
         },
-        "d3": {
-            "exports": "d3"
+        "d3-selection": {
+            "exports": "d3-selection"
+        },
+        "d3-scale": {
+            "deps": ["d3-array", "d3-collection", "d3-color", "d3-format", "d3-interpolate", "d3-time", "d3-time-format"],
+            "exports": "d3-scale"
+        },
+        "d3-axis": {
+            "exports": "d3-axis"
         }
     }
 });
diff --git a/package.json b/package.json
index 65fabeb1f6..55bc7ab667 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,16 @@
   "version": "0.12.1-SNAPSHOT",
   "description": "The Open MCT core platform",
   "dependencies": {
+    "d3-array": "^1.0.2",
+    "d3-axis": "^1.0.4",
+    "d3-collection": "^1.0.2",
+    "d3-color": "^1.0.2",
+    "d3-format": "^1.0.2",
+    "d3-interpolate": "^1.1.3",
+    "d3-scale": "^1.0.4",
+    "d3-selection": "^1.0.3",
+    "d3-time": "^1.0.4",
+    "d3-time-format": "^2.0.3",
     "express": "^4.13.1",
     "minimist": "^1.1.1",
     "request": "^2.69.0"
diff --git a/platform/features/conductor/core/src/ui/ConductorAxisController.js b/platform/features/conductor/core/src/ui/ConductorAxisController.js
index b99eaa0e6e..7d4c2df7da 100644
--- a/platform/features/conductor/core/src/ui/ConductorAxisController.js
+++ b/platform/features/conductor/core/src/ui/ConductorAxisController.js
@@ -22,9 +22,11 @@
 
 define(
     [
-        "d3"
+        "d3-selection",
+        "d3-scale",
+        "d3-axis"
     ],
-    function (d3) {
+    function (d3Selection, d3Scale, d3Axis) {
         var PADDING = 1;
 
         /**
@@ -70,12 +72,12 @@ define(
         ConductorAxisController.prototype.initialize = function (element) {
             this.target = element[0].firstChild;
             var height = this.target.offsetHeight;
-            var vis = d3.select(this.target)
+            var vis = d3Selection.select(this.target)
                 .append("svg:svg")
                 .attr("width", "100%")
                 .attr("height", height);
 
-            this.xAxis = d3.axisTop();
+            this.xAxis = d3Axis.axisTop();
 
             // draw x axis with labels and move to the bottom of the chart area
             this.axisElement = vis.append("g")
@@ -115,10 +117,10 @@ define(
             var bounds = this.bounds;
 
             if (timeSystem.isUTCBased()) {
-                this.xScale = this.xScale || d3.scaleUtc();
+                this.xScale = this.xScale || d3Scale.scaleUtc();
                 this.xScale.domain([new Date(bounds.start), new Date(bounds.end)]);
             } else {
-                this.xScale = this.xScale || d3.scaleLinear();
+                this.xScale = this.xScale || d3Scale.scaleLinear();
                 this.xScale.domain([bounds.start, bounds.end]);
             }
 
@@ -145,9 +147,9 @@ define(
                 //The D3 scale used depends on the type of time system as d3
                 // supports UTC out of the box.
                 if (timeSystem.isUTCBased()) {
-                    this.xScale = d3.scaleUtc();
+                    this.xScale = d3Scale.scaleUtc();
                 } else {
-                    this.xScale = d3.scaleLinear();
+                    this.xScale = d3Scale.scaleLinear();
                 }
 
                 this.xAxis.scale(this.xScale);
diff --git a/platform/features/conductor/core/src/ui/ConductorAxisControllerSpec.js b/platform/features/conductor/core/src/ui/ConductorAxisControllerSpec.js
index 2dbbb42c4b..6cc9677a16 100644
--- a/platform/features/conductor/core/src/ui/ConductorAxisControllerSpec.js
+++ b/platform/features/conductor/core/src/ui/ConductorAxisControllerSpec.js
@@ -23,11 +23,13 @@
 define([
     './ConductorAxisController',
     'zepto',
-    'd3'
+    'd3-selection',
+    'd3-scale'
 ], function (
     ConductorAxisController,
     $,
-    d3
+    d3Selection,
+    d3Scale
 ) {
     describe("The ConductorAxisController", function () {
         var controller,
@@ -84,8 +86,8 @@ define([
                 "emit"
             ]);
 
-            spyOn(d3, 'scaleUtc').andCallThrough();
-            spyOn(d3, 'scaleLinear').andCallThrough();
+            spyOn(d3Scale, 'scaleUtc').andCallThrough();
+            spyOn(d3Scale, 'scaleLinear').andCallThrough();
 
             element = $('<div style="width: 100px;"><div style="width: 100%;"></div></div>');
             $(document).find('body').append(element);
@@ -122,15 +124,15 @@ define([
                 mockTimeSystem.isUTCBased.andReturn(true);
                 controller.changeTimeSystem(mockTimeSystem);
 
-                expect(d3.scaleUtc).toHaveBeenCalled();
-                expect(d3.scaleLinear).not.toHaveBeenCalled();
+                expect(d3Scale.scaleUtc).toHaveBeenCalled();
+                expect(d3Scale.scaleLinear).not.toHaveBeenCalled();
             });
 
             it("uses a linear scale for non-UTC time systems", function () {
                 mockTimeSystem.isUTCBased.andReturn(false);
                 controller.changeTimeSystem(mockTimeSystem);
-                expect(d3.scaleLinear).toHaveBeenCalled();
-                expect(d3.scaleUtc).not.toHaveBeenCalled();
+                expect(d3Scale.scaleLinear).toHaveBeenCalled();
+                expect(d3Scale.scaleUtc).not.toHaveBeenCalled();
             });
 
             it("sets axis domain to time conductor bounds", function () {
diff --git a/test-main.js b/test-main.js
index b300560588..3f30247742 100644
--- a/test-main.js
+++ b/test-main.js
@@ -64,7 +64,16 @@ requirejs.config({
         "uuid": "bower_components/node-uuid/uuid",
         "zepto": "bower_components/zepto/zepto.min",
         "lodash": "bower_components/lodash/lodash",
-        "d3": "bower_components/d3/d3.min"
+        "d3-selection": "node_modules/d3-selection/build/d3-selection.min",
+        "d3-scale": "node_modules/d3-scale/build/d3-scale.min",
+        "d3-axis": "node_modules/d3-axis/build/d3-axis.min",
+        "d3-array": "node_modules/d3-array/build/d3-array.min",
+        "d3-collection": "node_modules/d3-collection/build/d3-collection.min",
+        "d3-color": "node_modules/d3-color/build/d3-color.min",
+        "d3-format": "node_modules/d3-format/build/d3-format.min",
+        "d3-interpolate": "node_modules/d3-interpolate/build/d3-interpolate.min",
+        "d3-time": "node_modules/d3-time/build/d3-time.min",
+        "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min"
     },
 
     "shim": {
@@ -89,8 +98,15 @@ requirejs.config({
         "lodash": {
             "exports": "lodash"
         },
-        "d3": {
-            "exports": "d3"
+        "d3-selection": {
+            "exports": "d3-selection"
+        },
+        "d3-scale": {
+            "deps": ["d3-array", "d3-collection", "d3-color", "d3-format", "d3-interpolate", "d3-time", "d3-time-format"],
+            "exports": "d3-scale"
+        },
+        "d3-axis": {
+            "exports": "d3-axis"
         }
     },