diff --git a/python/IntelliLang-python/IntelliLang-python.iml b/python/IntelliLang-python/IntelliLang-python.iml
new file mode 100644
index 0000000..b28d5b4
--- /dev/null
+++ b/python/IntelliLang-python/IntelliLang-python.iml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="core-api" />
+    <orderEntry type="module" module-name="IntelliLang" />
+    <orderEntry type="module" module-name="python-community" />
+  </component>
+</module>
+
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>
