diff --git a/libnativebridge/native_bridge.cc b/libnativebridge/native_bridge.cc
index fa80e1e..6602d3f 100644
--- a/libnativebridge/native_bridge.cc
+++ b/libnativebridge/native_bridge.cc
@@ -29,7 +29,6 @@
 enum class NativeBridgeState {
   kNotSetup,                        // Initial state.
   kOpened,                          // After successful dlopen.
-                                    // Temporary meaning: string copied. TODO: remove. b/17440362
   kInitialized,                     // After successful initialization.
   kClosed                           // Closed or errors.
 };
@@ -61,9 +60,6 @@
 // Whether we had an error at some point.
 static bool had_error = false;
 
-// Native bridge filename. TODO: Temporary, remove. b/17440362
-static const char* native_bridge_filename;
-
 // Handle of the loaded library.
 static void* native_bridge_handle = nullptr;
 // Pointer to the callbacks. Available as soon as LoadNativeBridge succeeds, but only initialized
@@ -135,32 +131,28 @@
       state = NativeBridgeState::kClosed;
       had_error = true;
     } else {
-      // Save the name. TODO: Remove this, return to old flow. b/17440362
-      native_bridge_filename = nb_library_filename;
-      runtime_callbacks = runtime_cbs;
-      state = NativeBridgeState::kOpened;
-//       // Try to open the library.
-//       void* handle = dlopen(nb_library_filename, RTLD_LAZY);
-//       if (handle != nullptr) {
-//         callbacks = reinterpret_cast<NativeBridgeCallbacks*>(dlsym(handle,
-//                                                                    kNativeBridgeInterfaceSymbol));
-//         if (callbacks != nullptr) {
-//           // Store the handle for later.
-//           native_bridge_handle = handle;
-//         } else {
-//           dlclose(handle);
-//         }
-//       }
-//
-//       // Two failure conditions: could not find library (dlopen failed), or could not find native
-//       // bridge interface (dlsym failed). Both are an error and close the native bridge.
-//       if (callbacks == nullptr) {
-//         had_error = true;
-//         state = NativeBridgeState::kClosed;
-//       } else {
-//         runtime_callbacks = runtime_cbs;
-//         state = NativeBridgeState::kOpened;
-//       }
+      // Try to open the library.
+      void* handle = dlopen(nb_library_filename, RTLD_LAZY);
+      if (handle != nullptr) {
+        callbacks = reinterpret_cast<NativeBridgeCallbacks*>(dlsym(handle,
+                                                                   kNativeBridgeInterfaceSymbol));
+        if (callbacks != nullptr) {
+          // Store the handle for later.
+          native_bridge_handle = handle;
+        } else {
+          dlclose(handle);
+        }
+      }
+
+      // Two failure conditions: could not find library (dlopen failed), or could not find native
+      // bridge interface (dlsym failed). Both are an error and close the native bridge.
+      if (callbacks == nullptr) {
+        had_error = true;
+        state = NativeBridgeState::kClosed;
+      } else {
+        runtime_callbacks = runtime_cbs;
+        state = NativeBridgeState::kOpened;
+      }
     }
     return state == NativeBridgeState::kOpened;
   }
@@ -171,38 +163,15 @@
   // point we are not multi-threaded, so we do not need locking here.
 
   if (state == NativeBridgeState::kOpened) {
-    // Open and initialize. TODO: Temporary, remove. b/17440362
-    void* handle = dlopen(native_bridge_filename, RTLD_LAZY);
-    if (handle != nullptr) {
-      callbacks = reinterpret_cast<NativeBridgeCallbacks*>(dlsym(handle,
-                                                                 kNativeBridgeInterfaceSymbol));
-      if (callbacks != nullptr) {
-        if (callbacks->initialize(runtime_callbacks)) {
-          state = NativeBridgeState::kInitialized;
-          native_bridge_handle = handle;
-        } else {
-          callbacks = nullptr;
-        }
-      }
-
-      if (callbacks == nullptr) {
-        state = NativeBridgeState::kClosed;
-        had_error = true;
-        dlclose(handle);
-      }
+    // Try to initialize.
+    if (callbacks->initialize(runtime_callbacks)) {
+      state = NativeBridgeState::kInitialized;
     } else {
-      state = NativeBridgeState::kClosed;
+      // Unload the library.
+      dlclose(native_bridge_handle);
       had_error = true;
+      state = NativeBridgeState::kClosed;
     }
-//     // Try to initialize.
-//     if (callbacks->initialize(runtime_callbacks)) {
-//       state = NativeBridgeState::kInitialized;
-//     } else {
-//       // Unload the library.
-//       dlclose(native_bridge_handle);
-//       had_error = true;
-//       state = NativeBridgeState::kClosed;
-//     }
   } else {
     had_error = true;
     state = NativeBridgeState::kClosed;
@@ -216,7 +185,7 @@
   // point we are not multi-threaded, so we do not need locking here.
 
   switch(state) {
-    // case NativeBridgeState::kOpened:  // TODO: Re-add this. b/17440362
+    case NativeBridgeState::kOpened:
     case NativeBridgeState::kInitialized:
       // Unload.
       dlclose(native_bridge_handle);
@@ -227,7 +196,6 @@
       had_error = true;
       break;
 
-    case NativeBridgeState::kOpened:  // TODO: Remove this. b/17440362
     case NativeBridgeState::kClosed:
       // Ignore.
       break;
diff --git a/libnativebridge/tests/ValidNameNativeBridge_test.cpp b/libnativebridge/tests/ValidNameNativeBridge_test.cpp
index b28f5b2..690be4a 100644
--- a/libnativebridge/tests/ValidNameNativeBridge_test.cpp
+++ b/libnativebridge/tests/ValidNameNativeBridge_test.cpp
@@ -27,12 +27,9 @@
     // Now check what happens on LoadNativeBridge.
     EXPECT_EQ(false, NativeBridgeError());
     LoadNativeBridge(kTestName, nullptr);
-    // TODO: Remove this call. b/17440362
-    InitializeNativeBridge();
     // This will lead to an error as the library doesn't exist.
     EXPECT_EQ(true, NativeBridgeError());
-    // TODO: Test again. b/17440362
-//     EXPECT_EQ(false, NativeBridgeAvailable());
+    EXPECT_EQ(false, NativeBridgeAvailable());
 }
 
 }  // namespace android
