diff --git a/dev-tools/eclipse/dot.classpath b/dev-tools/eclipse/dot.classpath
index 17280705c64..4f88ffca6d2 100644
--- a/dev-tools/eclipse/dot.classpath
+++ b/dev-tools/eclipse/dot.classpath
@@ -168,7 +168,7 @@
-
+
diff --git a/dev-tools/idea/.idea/libraries/JUnit.xml b/dev-tools/idea/.idea/libraries/JUnit.xml
index b6e28c823dc..592cf0090ef 100644
--- a/dev-tools/idea/.idea/libraries/JUnit.xml
+++ b/dev-tools/idea/.idea/libraries/JUnit.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/dev-tools/maven/pom.xml.template b/dev-tools/maven/pom.xml.template
index a6008b6317e..c432f674166 100644
--- a/dev-tools/maven/pom.xml.template
+++ b/dev-tools/maven/pom.xml.template
@@ -434,7 +434,7 @@
com.carrotsearch.randomizedtesting
randomizedtesting-runner
- 2.0.3
+ 2.0.4
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index a9f01ae2dc6..1f0f329f7e1 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -117,6 +117,10 @@ Optimizations
Build
+* Upgrade randomized testing to version 2.0.4: avoid hangs on shutdown
+ hooks hanging forever by calling Runtime.halt() in addition to
+ Runtime.exit() after a short delay to allow graceful shutdown (Dawid Weiss)
+
* LUCENE-4451: Memory leak per unique thread caused by
RandomizedContext.contexts static map. Upgrade randomized testing
to version 2.0.2 (Mike McCandless, Dawid Weiss)
diff --git a/lucene/licenses/junit4-ant-2.0.3.jar.sha1 b/lucene/licenses/junit4-ant-2.0.3.jar.sha1
deleted file mode 100644
index 130776b0ac6..00000000000
--- a/lucene/licenses/junit4-ant-2.0.3.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c9b5b280935fda44bb2c905572cfab0192879bcb
diff --git a/lucene/licenses/junit4-ant-2.0.4.jar.sha1 b/lucene/licenses/junit4-ant-2.0.4.jar.sha1
new file mode 100644
index 00000000000..5f2d8a93507
--- /dev/null
+++ b/lucene/licenses/junit4-ant-2.0.4.jar.sha1
@@ -0,0 +1 @@
+6feed9f7b79b3a9fa2cf52a2ac171e87a261de56
diff --git a/lucene/licenses/randomizedtesting-runner-2.0.3.jar.sha1 b/lucene/licenses/randomizedtesting-runner-2.0.3.jar.sha1
deleted file mode 100644
index a4b22218d78..00000000000
--- a/lucene/licenses/randomizedtesting-runner-2.0.3.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c31bc570c1e2f7584a09aa4853de7f3e3785a7ef
diff --git a/lucene/licenses/randomizedtesting-runner-2.0.4.jar.sha1 b/lucene/licenses/randomizedtesting-runner-2.0.4.jar.sha1
new file mode 100644
index 00000000000..d8031bfd110
--- /dev/null
+++ b/lucene/licenses/randomizedtesting-runner-2.0.4.jar.sha1
@@ -0,0 +1 @@
+aefbd9ebaae63716d9182fcce221ec4bb2528dfc
diff --git a/lucene/test-framework/ivy.xml b/lucene/test-framework/ivy.xml
index c0ecf46ab8b..47b639b0b03 100644
--- a/lucene/test-framework/ivy.xml
+++ b/lucene/test-framework/ivy.xml
@@ -32,8 +32,8 @@
-
-
+
+
diff --git a/solr/licenses/junit4-ant-2.0.3.jar.sha1 b/solr/licenses/junit4-ant-2.0.3.jar.sha1
deleted file mode 100644
index 130776b0ac6..00000000000
--- a/solr/licenses/junit4-ant-2.0.3.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c9b5b280935fda44bb2c905572cfab0192879bcb
diff --git a/solr/licenses/junit4-ant-2.0.4.jar.sha1 b/solr/licenses/junit4-ant-2.0.4.jar.sha1
new file mode 100644
index 00000000000..5f2d8a93507
--- /dev/null
+++ b/solr/licenses/junit4-ant-2.0.4.jar.sha1
@@ -0,0 +1 @@
+6feed9f7b79b3a9fa2cf52a2ac171e87a261de56
diff --git a/solr/licenses/randomizedtesting-runner-2.0.3.jar.sha1 b/solr/licenses/randomizedtesting-runner-2.0.3.jar.sha1
deleted file mode 100644
index a4b22218d78..00000000000
--- a/solr/licenses/randomizedtesting-runner-2.0.3.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c31bc570c1e2f7584a09aa4853de7f3e3785a7ef
diff --git a/solr/licenses/randomizedtesting-runner-2.0.4.jar.sha1 b/solr/licenses/randomizedtesting-runner-2.0.4.jar.sha1
new file mode 100644
index 00000000000..d8031bfd110
--- /dev/null
+++ b/solr/licenses/randomizedtesting-runner-2.0.4.jar.sha1
@@ -0,0 +1 @@
+aefbd9ebaae63716d9182fcce221ec4bb2528dfc
diff --git a/solr/test-framework/ivy.xml b/solr/test-framework/ivy.xml
index 742a0319606..63d827668a8 100644
--- a/solr/test-framework/ivy.xml
+++ b/solr/test-framework/ivy.xml
@@ -32,8 +32,8 @@
-
-
+
+