diff --git a/python/IntelliLang-python/src/META-INF/intellilang-python-support.xml b/python/IntelliLang-python/src/META-INF/intellilang-python-support.xml
new file mode 100644
index 0000000..2ffa9f7
--- /dev/null
+++ b/python/IntelliLang-python/src/META-INF/intellilang-python-support.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<idea-plugin version="2">
+  <extensions defaultExtensionNs="org.intellij.intelliLang">
+    <languageSupport implementation="com.jetbrains.python.intelliLang.PyLanguageInjectionSupport"/>
+    <injectionConfig config="pyInjections.xml"/>
+  </extensions>
+  <extensions defaultExtensionNs="com.intellij">
+    <patterns.patternClass className="com.jetbrains.python.patterns.PythonPatterns" alias="py"/>
+  </extensions>
+</idea-plugin>
\ No newline at end of file
diff --git a/python/IntelliLang-python/src/com/jetbrains/python/intelliLang/PyLanguageInjectionSupport.java b/python/IntelliLang-python/src/com/jetbrains/python/intelliLang/PyLanguageInjectionSupport.java
new file mode 100644
index 0000000..8065e1f
--- /dev/null
+++ b/python/IntelliLang-python/src/com/jetbrains/python/intelliLang/PyLanguageInjectionSupport.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.intelliLang;
+
+import com.intellij.lang.Language;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiLanguageInjectionHost;
+import com.jetbrains.python.patterns.PythonPatterns;
+import com.jetbrains.python.psi.PyElement;
+import com.jetbrains.python.psi.PyStringLiteralExpression;
+import org.intellij.plugins.intelliLang.inject.AbstractLanguageInjectionSupport;
+import org.intellij.plugins.intelliLang.inject.config.BaseInjection;
+import org.jdom.Element;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * @author yole
+ */
+public class PyLanguageInjectionSupport extends AbstractLanguageInjectionSupport {
+  @NonNls private static final String SUPPORT_ID = "python";
+
+  @NotNull
+  @Override
+  public String getId() {
+    return SUPPORT_ID;
+  }
+
+  @NotNull
+  @Override
+  public Class[] getPatternClasses() {
+    return new Class[] { PythonPatterns.class };
+  }
+
+  @Override
+  public boolean isApplicableTo(PsiLanguageInjectionHost host) {
+    return host instanceof PyElement;
+  }
+
+  @Override
+  public boolean useDefaultInjector(PsiLanguageInjectionHost host) {
+    return true;
+  }
+
+  @Override
+  public BaseInjection createInjection(Element element) {
+    // This is how DefaultLanguageInjector gets its injection ranges
+    return new BaseInjection(getId()) {
+      @NotNull
+      @Override
+      public List<TextRange> getInjectedArea(PsiElement element) {
+        if (element instanceof PyStringLiteralExpression) {
+          return ((PyStringLiteralExpression)element).getStringValueTextRanges();
+        }
+        return super.getInjectedArea(element);
+      }
+    };
+  }
+
+  @Override
+  public boolean addInjectionInPlace(Language language, PsiLanguageInjectionHost psiElement) {
+    // XXX: Disable temporary injections via intention actions for Python elements, since TemporaryPlacesInjector cannot handle elements
+    // with multiple injection text ranges (PY-10691)
+    return true;
+  }
+}
diff --git a/python/IntelliLang-python/src/pyInjections.xml b/python/IntelliLang-python/src/pyInjections.xml
new file mode 100644
index 0000000..e9ae34e
--- /dev/null
+++ b/python/IntelliLang-python/src/pyInjections.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component name="LanguageInjectionConfiguration">
+  <injection language="SQLite" injector-id="python">
+    <display-name>sqlite3</display-name>
+    <place><![CDATA[pyLiteralExpression().and(pyMethodArgument("execute", 0, "_sqlite3.Connection"))]]></place>
+    <place><![CDATA[pyLiteralExpression().and(pyMethodArgument("executemany", 0, "_sqlite3.Connection"))]]></place>
+    <place><![CDATA[pyLiteralExpression().and(pyMethodArgument("execute", 0, "_sqlite3.Cursor"))]]></place>
+    <place><![CDATA[pyLiteralExpression().and(pyMethodArgument("executemany", 0, "_sqlite3.Cursor"))]]></place>
+  </injection>
+  <injection language="SQL" injector-id="python">
+    <display-name>"SQL select/delete/insert/update/create"</display-name>
+    <place><![CDATA[pyLiteralExpression().withText(string().matchesBrics(" *(((SELECT|DELETE) .*FROM)|((INSERT|REPLACE) .*INTO)|(UPDATE .* SET)|((CREATE|DROP|ALTER) +(TABLE|INDEX))) .*"))]]></place>
+  </injection>
+</component>
