diff --git a/.gitignore b/.gitignore
index da17820..3e6a6e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
 
 /.gradle/
 /build/
+/libs/
diff --git a/build.gradle.kts b/build.gradle.kts
index 3c81a91..d833c15 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -10,13 +10,28 @@ plugins {
 group = "com.chylex.intellij.rainbowbrackets"
 version = "6.26-chylex-1"
 
+val ideVersion = "2023.2.2"
+
+idea {
+	module {
+		excludeDirs.add(file("gradle"))
+		excludeDirs.add(file("libs"))
+	}
+}
+
 repositories {
 	mavenCentral()
 	maven(url = "https://www.jetbrains.com/intellij-repository/releases")
 	maven(url = "https://www.jetbrains.com/intellij-repository/snapshots")
 }
 
+val clion: Configuration by configurations.creating
+val rider: Configuration by configurations.creating
+
 dependencies {
+	clion("com.jetbrains.intellij.clion:clion:$ideVersion")
+	rider("com.jetbrains.intellij.rider:riderRD:$ideVersion")
+	
 	compileOnly(fileTree("libs"))
 	
 	testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
@@ -29,7 +44,7 @@ kotlin {
 
 intellij {
 	type.set("IU")
-	version.set("2023.2.2")
+	version.set(ideVersion)
 	updateSinceUntilBuild.set(false)
 	
 	plugins.set(
@@ -68,3 +83,28 @@ tasks.withType<KotlinCompile> {
 		"-Xjvm-default=all"
 	)
 }
+
+fun createDownloadIdeTask(name: String, dependency: Configuration, configuration: CopySpec.() -> Unit): Sync {
+	return tasks.create<Sync>(name) {
+		group = "ides"
+		outputs.upToDateWhen { false }
+		
+		from(dependency.map(::zipTree), configuration)
+		into(file("libs/${dependency.name}"))
+	}
+}
+
+val downloadIdeClion = createDownloadIdeTask("downloadIdeClion", clion) {
+	include("plugins/cidr-base-plugin/**")
+}
+
+val downloadIdeRider = createDownloadIdeTask("downloadIdeRider", rider) {
+	include("lib/app.jar")
+}
+
+tasks.create<Sync>("downloadExtraIdes") {
+	group = "ides"
+	
+	dependsOn(downloadIdeClion)
+	dependsOn(downloadIdeRider)
+}
diff --git a/libs/clion.jar b/libs/clion.jar
deleted file mode 100644
index 0edb4d3..0000000
Binary files a/libs/clion.jar and /dev/null differ
diff --git a/libs/rider.jar b/libs/rider.jar
deleted file mode 100644
index 3c8a872..0000000
Binary files a/libs/rider.jar and /dev/null differ
diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/CSharpBracePairProvider.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/CSharpBracePairProvider.kt
index 3febf56..4b04970 100644
--- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/CSharpBracePairProvider.kt
+++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/CSharpBracePairProvider.kt
@@ -1,21 +1,13 @@
 package com.github.izhangzhihao.rainbow.brackets.provider
 
 import com.intellij.lang.BracePair
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.GT
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LBRACE
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LBRACKET
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LPARENTH
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LT
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RBRACE
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RBRACKET
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RPARENTH
+import com.jetbrains.rider.ideaInterop.fileTypes.csharp.kotoparser.lexer.CSharpTokenType
 
 class CSharpBracePairProvider : BracePairProvider {
     override fun pairs(): List<BracePair> = listOf(
-            //BracePair(LPARENTH, RPARENTH, false),
-            BracePair(LBRACE, RBRACE, false),
-            BracePair(LBRACKET, RBRACKET, false),
-            BracePair(LT, GT, false),
+            BracePair(CSharpTokenType.LPARENTH, CSharpTokenType.RPARENTH, false),
+            BracePair(CSharpTokenType.LBRACE, CSharpTokenType.RBRACE, false),
+            BracePair(CSharpTokenType.LBRACKET, CSharpTokenType.RBRACKET, false),
+            BracePair(CSharpTokenType.LT, CSharpTokenType.GT, false),
     )
-}
\ No newline at end of file
+}
diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/OCBracePairProvider.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/OCBracePairProvider.kt
index c427576..e13e5cc 100644
--- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/OCBracePairProvider.kt
+++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/provider/OCBracePairProvider.kt
@@ -1,8 +1,8 @@
 package com.github.izhangzhihao.rainbow.brackets.provider
 
 import com.intellij.lang.BracePair
-import com.jetbrains.cidr.lang.parser.OCTokenTypes
+import com.jetbrains.cidr.lang.parser.OCLexerTokenTypes
 
 class OCBracePairProvider : BracePairProvider {
-    override fun pairs(): List<BracePair> = listOf(BracePair(OCTokenTypes.LT, OCTokenTypes.GT, false))
-}
\ No newline at end of file
+    override fun pairs(): List<BracePair> = listOf(BracePair(OCLexerTokenTypes.LT, OCLexerTokenTypes.GT, false))
+}
diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/CSharpRainbowVisitor.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/CSharpRainbowVisitor.kt
index cb54a21..8cb5723 100644
--- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/CSharpRainbowVisitor.kt
+++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/CSharpRainbowVisitor.kt
@@ -7,10 +7,7 @@ import com.intellij.psi.PsiElement
 import com.intellij.psi.PsiFile
 import com.intellij.psi.impl.source.tree.LeafPsiElement
 import com.intellij.psi.tree.IElementType
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.GT
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LPARENTH
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LT
-import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RPARENTH
+import com.jetbrains.rider.ideaInterop.fileTypes.csharp.kotoparser.lexer.CSharpTokenType
 import com.jetbrains.rider.ideaInterop.fileTypes.csharp.psi.CSharpDummyNode
 
 
@@ -50,8 +47,8 @@ class CSharpRainbowVisitor : RainbowHighlightVisitor() {
 
     companion object {
         val map = mapOf(
-                LPARENTH to BracePair(LPARENTH, RPARENTH, true),
-                RPARENTH to BracePair(LPARENTH, RPARENTH, true),
+                CSharpTokenType.LPARENTH to BracePair(CSharpTokenType.LPARENTH, CSharpTokenType.RPARENTH, true),
+                CSharpTokenType.RPARENTH to BracePair(CSharpTokenType.LPARENTH, CSharpTokenType.RPARENTH, true),
                 //LT to BracePair(LT, GT, true),
                 //GT to BracePair(LT, GT, true),
         )
@@ -123,4 +120,4 @@ class CSharpRainbowVisitor : RainbowHighlightVisitor() {
             }
         }
     }
-}
\ No newline at end of file
+}