diff --git a/build.gradle b/build.gradle
index 5cdfd45..c734ad5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -131,10 +131,10 @@
     })
     compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.2.0'
     compile group: 'org.apache.commons', name: 'commons-compress', version: '1.12'
-    compile group: 'org.ow2.asm', name: 'asm', version: '6.0_BETA'
-    compile group: 'org.ow2.asm', name: 'asm-commons', version: '6.0_BETA'
-    compile group: 'org.ow2.asm', name: 'asm-tree', version: '6.0_BETA'
-    compile group: 'org.ow2.asm', name: 'asm-util', version: '6.0_BETA'
+    compile group: 'org.ow2.asm', name: 'asm', version: '5.1'
+    compile group: 'org.ow2.asm', name: 'asm-commons', version: '5.1'
+    compile group: 'org.ow2.asm', name: 'asm-tree', version: '5.1'
+    compile group: 'org.ow2.asm', name: 'asm-util', version: '5.1'
     testCompile sourceSets.examples.output
     testCompile 'junit:junit:4.12'
     testCompile group: 'org.smali', name: 'smali', version: '2.2b4'
@@ -143,7 +143,7 @@
     jctfCommonCompile 'junit:junit:4.12'
     jctfTestsCompile 'junit:junit:4.12'
     jctfTestsCompile sourceSets.jctfCommon.output
-    examplesAndroidOCompile group: 'org.ow2.asm', name: 'asm', version: '6.0_BETA'
+    examplesAndroidOCompile group: 'org.ow2.asm', name: 'asm', version: '5.1'
     examplesCompile 'com.google.protobuf:protobuf-lite:3.0.0'
     examplesRuntime 'com.google.protobuf:protobuf-lite:3.0.0'
     supportLibs 'com.android.support:support-v4:25.4.0'
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index a90373e..5718ec2 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -5,7 +5,7 @@
 
 import static org.objectweb.asm.ClassReader.SKIP_FRAMES;
 import static org.objectweb.asm.Opcodes.ACC_DEPRECATED;
-import static org.objectweb.asm.Opcodes.ASM6;
+import static org.objectweb.asm.Opcodes.ASM5;
 
 import com.android.tools.r8.Resource;
 import com.android.tools.r8.dex.Constants;
@@ -121,7 +121,7 @@
         byte[] classCache,
         JarApplicationReader application,
         Consumer<DexClass> classConsumer) {
-      super(ASM6);
+      super(ASM5);
       this.file = file;
       this.classKind = classKind;
       this.classConsumer = classConsumer;
@@ -299,7 +299,7 @@
 
     public CreateFieldVisitor(CreateDexClassVisitor parent,
         int access, String name, String desc, String signature, Object value) {
-      super(ASM6);
+      super(ASM5);
       this.parent = parent;
       this.access = access;
       this.name = name;
@@ -401,7 +401,7 @@
 
     public CreateMethodVisitor(int access, String name, String desc, String signature,
         String[] exceptions, CreateDexClassVisitor parent) {
-      super(ASM6);
+      super(ASM5);
       this.access = access;
       this.name = name;
       this.desc = desc;
@@ -588,7 +588,7 @@
 
     public CreateAnnotationVisitor(
         JarApplicationReader application, BiConsumer<List<DexString>, List<DexValue>> onVisitEnd) {
-      super(ASM6);
+      super(ASM5);
       this.application = application;
       this.onVisitEnd = onVisitEnd;
     }
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index 39c580e..1dc5964 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -165,7 +165,7 @@
     private final JarApplicationReader application;
 
     public SecondVisitor(ReparseContext context, JarApplicationReader application) {
-      super(Opcodes.ASM6);
+      super(Opcodes.ASM5);
       this.context = context;
       this.application = application;
     }
diff --git a/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java b/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
index 2d38bf0..b8cbaa9 100644
--- a/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
+++ b/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.jar;
 
-import static org.objectweb.asm.Opcodes.ASM6;
+import static org.objectweb.asm.Opcodes.ASM5;
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.Unreachable;
@@ -24,7 +24,7 @@
 
   public JarRegisterEffectsVisitor(DexType clazz, UseRegistry registry,
       JarApplicationReader application) {
-    super(ASM6);
+    super(ASM5);
     this.clazz = clazz;
     this.registry = registry;
     this.application = application;
diff --git a/src/test/examplesAndroidO/invokecustom/TestGenerator.java b/src/test/examplesAndroidO/invokecustom/TestGenerator.java
index 574fe14..5c550e9 100644
--- a/src/test/examplesAndroidO/invokecustom/TestGenerator.java
+++ b/src/test/examplesAndroidO/invokecustom/TestGenerator.java
@@ -39,7 +39,7 @@
     ClassReader cr = new ClassReader(new FileInputStream(classNamePath.toFile()));
     ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
     cr.accept(
-        new ClassVisitor(Opcodes.ASM6, cw) {
+        new ClassVisitor(Opcodes.ASM5, cw) {
           @Override
           public void visitEnd() {
             generateMethodTest1(cw);
diff --git a/src/test/examplesAndroidO/invokecustom2/TestGenerator.java b/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
index ab77d32..48cfedb 100644
--- a/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
+++ b/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
@@ -40,7 +40,7 @@
     ClassReader cr = new ClassReader(new FileInputStream(classNamePath.toFile()));
     ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
     cr.accept(
-        new ClassVisitor(Opcodes.ASM6, cw) {
+        new ClassVisitor(Opcodes.ASM5, cw) {
           @Override
           public void visitEnd() {
             generateMethodTest1(cw);
diff --git a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
index ab88a99..601ca23 100644
--- a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
+++ b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
@@ -17,6 +17,7 @@
 import com.android.tools.r8.utils.DexInspector;
 import com.android.tools.r8.utils.DexInspector.AnnotationSubject;
 import com.android.tools.r8.utils.DexInspector.ClassSubject;
+import com.google.common.io.Closer;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -157,7 +158,7 @@
       throws IOException, ExecutionException {
     ClassReader classReader = new ClassReader(new FileInputStream(inputPath.toFile()));
     ReadSourceDebugExtensionAttribute sourceDebugExtensionReader =
-        new ReadSourceDebugExtensionAttribute(Opcodes.ASM6, null);
+        new ReadSourceDebugExtensionAttribute(Opcodes.ASM5, null);
     classReader.accept(sourceDebugExtensionReader, 0);
 
     DexInspector dexInspector =
