diff --git a/docs/profile.md b/docs/profile.md
index b3ceff0..e4c14a7 100644
--- a/docs/profile.md
+++ b/docs/profile.md
@@ -15,4 +15,4 @@
 kill -12 1480
 
 
-dbus-monitor --system "type='signal',path_namespace='/xyz/openbmc_project/sensors'"
\ No newline at end of file
+dbus-monitor --system "type='signal',path_namespace='/xyz/openbmc_project/sensors/tach'"
\ No newline at end of file
diff --git a/src/webserver_main.cpp b/src/webserver_main.cpp
index d20b8d5..ec21f6d 100644
--- a/src/webserver_main.cpp
+++ b/src/webserver_main.cpp
@@ -54,7 +54,7 @@
   s.unpack(object_name).unpack(values);
   crow::json::wvalue j;
   for (auto& value : values) {
-    //std::cout << "Got sensor value for " << s.get_path() << "\n";
+    // std::cout << "Got sensor value for " << s.get_path() << "\n";
     boost::apply_visitor([&](auto val) { j[s.get_path()] = val; },
                          value.second);
   }
@@ -107,39 +107,25 @@
   CROW_ROUTE(app, "/sensorws")
       .websocket()
       .onopen([&](crow::websocket::connection& conn) {
-        system_bus = std::make_shared<dbus::connection>(conn.get_io_service(),
-                                                        dbus::bus::system);
-        sensor_match = std::make_shared<dbus::match>(
-            *system_bus,
-            "type='signal',path_namespace='/xyz/openbmc_project/sensors'");
+        if (!system_bus) {
+          system_bus = std::make_shared<dbus::connection>(conn.get_io_service(),
+                                                          dbus::bus::system);
+        }
+        if (!sensor_match) {
+          sensor_match = std::make_shared<dbus::match>(
+              *system_bus,
+              "type='signal',path_namespace='/xyz/openbmc_project/sensors'");
+        }
+        if (!sensor_filter) {
+          sensor_filter =
+              std::make_shared<dbus::filter>(*system_bus, [](dbus::message& m) {
+                auto member = m.get_member();
+                return member == "PropertiesChanged";
+              });
+          sensor_filter->async_dispatch(on_sensor_update);
+        }
 
-        sensor_filter =
-            std::make_shared<dbus::filter>(*system_bus, [](dbus::message& m) {
-              auto member = m.get_member();
-              return member == "PropertiesChanged";
-            });
-        /*
-        std::function<void(boost::system::error_code, dbus::message)>
-            sensor_callback = [&conn, sensor_callback](
-                boost::system::error_code ec, dbus::message s) {
-              std::string object_name;
-              std::vector<std::pair<std::string, dbus::dbus_variant>> values;
-              s.unpack(object_name).unpack(values);
-              crow::json::wvalue j;
-              for (auto& value : values) {
-                std::cout << "Got sensor value for " << s.get_path() << "\n";
-                boost::apply_visitor([&](auto val) { j[s.get_path()] = val; },
-                                     value.second);
-              }
-              for (auto conn : users) {
-                conn.send_text(crow::json::dump(j));
-              }
-              sensor_filter->async_dispatch(sensor_callback);
-            };
-            */
-        sensor_filter->async_dispatch(on_sensor_update);
         users.insert(&conn);
-        ;
       })
       .onclose(
           [&](crow::websocket::connection& conn, const std::string& reason) {
diff --git a/static/CMakeLists.txt b/static/CMakeLists.txt
index b5a53ec..4e6831c 100644
--- a/static/CMakeLists.txt
+++ b/static/CMakeLists.txt
@@ -79,15 +79,17 @@
     get_filename_component(FOLDERNAME ${MINIFIED_FILENAME} DIRECTORY)
     # string(REGEX REPLACE "(\\.[^.]*$)" ".min\\1" OUTPUT_FILENAME ${OUTPUT_FILENAME})
     file(MAKE_DIRECTORY "${FOLDERNAME}")
-    add_custom_command(OUTPUT ${MINIFIED_FILENAME} 
-        COMMAND uglifyjs --compress --mangle  
-        --output "${MINIFIED_FILENAME}"
-        "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
-        DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
-        COMMENT "Minifying ${JAVASCRIPT_ASSET}"
-    )
-
-    list(APPEND MINIFIED_ASSETS_OUT ${MINIFIED_FILENAME})
+    if(UGLIFY_MINIFIER)
+        add_custom_command(OUTPUT ${MINIFIED_FILENAME} 
+            COMMAND uglifyjs --compress --mangle  
+            --output "${MINIFIED_FILENAME}"
+            "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
+            DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}"
+            COMMENT "Minifying ${JAVASCRIPT_ASSET}"
+        )
+        list(APPEND MINIFIED_ASSETS_OUT ${MINIFIED_FILENAME})
+    endif(UGLIFY_MINIFIER)
+    
     # if it's a debug build, use the unminified version
     if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR NOT UGLIFY_MINIFIER)
         list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET})
diff --git a/static/css/intel.css b/static/css/intel.css
index 6915f8a..2596d1e 100644
--- a/static/css/intel.css
+++ b/static/css/intel.css
@@ -2880,5 +2880,115 @@
     color: #fff!important
 }
 
+.animate-enter {
+    -webkit-animation: enter 600ms cubic-bezier(0.390, 0.575, 0.565, 1.000);
+    animation: enter 600ms cubic-bezier(0.390, 0.575, 0.565, 1.000);
+    display: block;
+    position: relative;
+}
+
+@-webkit-keyframes enter {
+    from {
+        opacity: 0;
+        height: 0px;
+    }
+    20% {
+        opacity: .5;
+    }
+    40% {
+        opacity: .15;
+        color: red;
+    }
+    60% {
+        opacity: .75;
+    }
+    80% {
+        opacity: .3;
+    }
+    to {
+        opacity: 1;
+        height: 30px;
+    }
+}
+
+@keyframes enter {
+    from {
+        opacity: 0;
+        height: 0px;
+    }
+    20% {
+        opacity: .5;
+    }
+    40% {
+        opacity: .15;
+        color: red;
+    }
+    60% {
+        opacity: .75;
+    }
+    80% {
+        opacity: .3;
+    }
+    to {
+        opacity: 1;
+        height: 30px;
+    }
+}
+
+.animate-leave {
+    -webkit-animation: leave 600ms cubic-bezier(0.390, 0.575, 0.565, 1.000);
+    animation: leave 600ms cubic-bezier(0.390, 0.575, 0.565, 1.000);
+    display: block;
+    position: relative;
+}
+
+@-webkit-keyframes leave {
+    to {
+        opacity: 0;
+        height: 0px;
+    }
+    80% {
+        opacity: .25;
+    }
+    60% {
+        opacity: .10;
+        color: red;
+    }
+    40% {
+        opacity: .5;
+    }
+    20% {
+        opacity: .30;
+    }
+    from {
+        opacity: 1;
+        height: 30px;
+    }
+}
+
+@keyframes leave {
+    to {
+        opacity: 0;
+        height: 0px;
+    }
+    80% {
+        opacity: .25;
+    }
+    60% {
+        opacity: .10;
+        color: red;
+    }
+    40% {
+        opacity: .5;
+    }
+    20% {
+        opacity: .30;
+    }
+    from {
+        opacity: 1;
+        height: 30px;
+    }
+}
+
 
 /*# sourceMappingURL=../maps/styles/auth-a200a050c1.css.map */
\ No newline at end of file
diff --git a/static/partial-sensor.html b/static/partial-sensor.html
index 09f1cad..3486a63 100644
--- a/static/partial-sensor.html
+++ b/static/partial-sensor.html
@@ -15,7 +15,7 @@
                             </tr>
                         </thead>
                         <tbody>
-                            <tr ng-repeat="(sensor_name, value) in sensor_values">
+                            <tr ng-animate="'animate'" ng-repeat="(sensor_name, value) in sensor_values">
                                 <td class="fit">{{ sensor_name }}</td>
                                 <td class="fit">{{ value }}</td>
                             </tr>
