diff --git a/_SUMMARY.md b/_SUMMARY.md
index f15d95ac4..11c41a1c6 100644
--- a/_SUMMARY.md
+++ b/_SUMMARY.md
@@ -88,7 +88,10 @@
* [Editor Components](user_interface_components/editor_components.md)
* [List and Tree Controls](user_interface_components/lists_and_trees.md)
* [Miscellaneous Swing Components](user_interface_components/misc_swing_components.md)
- * PHPStorm and WebStorm
+ * [PHPStorm](storm/phpstorm.md)
+ * [Setting-up the environment](storm/setting_up_environment.md)
+ * [PHP Open API](storm/php_open_api.md)
+ * [Existing 3rd party plugins](storm/existing_plugins.md)
* [Tutorials](tutorials.md)
* [Custom Language Support](tutorials/custom_language_support_tutorial.md)
* [1. Prerequisites](tutorials/custom_language_support/prerequisites.md)
diff --git a/storm/existing_plugins.md b/storm/existing_plugins.md
new file mode 100644
index 000000000..4b1bc520f
--- /dev/null
+++ b/storm/existing_plugins.md
@@ -0,0 +1,35 @@
+---
+title: Existing 3rd party framework-specific plugins
+---
+
+## Magicento
+
+Magicento is a free PHPStorm plugin for Magento developers.
+Features include: Goto for factories and template paths, autocomplete for factories, xml files and class names, documentation for xml nodes, evaluation of PHP code inside Magento environment, and much more to come!
+
+* [Official Magicento Web Site](http://magicento.com/)
+* [GitHub](https://github.com/enriquepiatti/Magicento)
+* [Magicento in PhpStorm Plugins Repository](http://plugins.jetbrains.com/plugin/?webide&pluginId=7089)
+
+## YiiStorm
+
+YiiStorm is a plugin for PhpStorm IDE that is adding code navigation enhancements for Yii framework based projects.
+Features are: Going from render and renderPartial to the view file. Includes controllers, partials and widgets. Supports all ways of specifying a view: themes, smarty .tpl views and external actions; Going from model name in relations() to the model class; Going from the $this->widget('path.to.widget.Class') call to the widget class; Going from controller actions() to action class.
+
+* [Official YiiStorm Web Site](http://mazx.ru/)
+* [GitHub](https://github.com/cmazx/yiistorm)
+* [YiiStorm in PhpStorm Plugins Repository](https://plugins.jetbrains.com/plugin/?webide&pluginId=7182)
+
+## Symfony2 - Clickable Views
+
+Symfony2 - Clickable Views is a plugin for Symfony2 Framework developers. Resolves on CTRL+Click the corresponding twig template in your Symfony2 project. This plugin demands a projectstructure which you can find in the Symfony2 Std. Edition and will not work with custom layouts.
+
+* [GitHub](https://github.com/xenji/phpstorm-symfony2-plugin)
+* [Symfony2 - Clickable Views plugin in PhpStorm Plugins Repository](https://plugins.jetbrains.com/plugin?pr=webide&pluginId=7057)
+
+## Symfony2 - Factory Support
+
+Symfony2 - Clickable Views is a plugin for Symfony2 Framework developers. Resolves on CTRL+Click the corresponding twig template in your Symfony2 project. This plugin demands a projectstructure which you can find in the Symfony2 Std. Edition and will not work with custom layouts.
+
+* [GitHub](https://github.com/Haehnchen/idea-php-symfony2-plugin)
+* [Symfony2 plugin in PhpStorm Plugins Repository](https://plugins.jetbrains.com/plugin?pr=&pluginId=7219)
\ No newline at end of file
diff --git a/storm/img/AddingLibrary.png b/storm/img/AddingLibrary.png
new file mode 100644
index 000000000..0c7c48d41
Binary files /dev/null and b/storm/img/AddingLibrary.png differ
diff --git a/storm/img/changingscope.png b/storm/img/changingscope.png
new file mode 100644
index 000000000..ebad3788a
Binary files /dev/null and b/storm/img/changingscope.png differ
diff --git a/storm/php_open_api.md b/storm/php_open_api.md
new file mode 100644
index 000000000..af4a8abd0
--- /dev/null
+++ b/storm/php_open_api.md
@@ -0,0 +1,212 @@
+---
+title: PHP Open API
+---
+
+## Using php-openapi
+
+```xml
+com.jetbrains.php
+```
+
+## PHP PSI
+
+`com.jetbrains.php.lang.psi.elements.*;`
+
+## Utility Classes
+
+## PHP Extension Points
+
+### PhpTypeProvider
+
+Here is a code fragment that makes [generic Factory Method support](https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata#PhpStormAdvancedMetadata-Factorymethods) work
+
+```xml
+
+```
+
+Interface:
+
+```java
+/**
+ * Extension point to implement to provide Type information on various PhpPsiElements
+ */
+public interface PhpTypeProvider2 {
+
+ ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.php.typeProvider2");
+
+ /**
+ * @return Your custom signature key, i.e. "?". Do not use any of PhpTypeSignatureKey.XXX constants though!
+ */
+ char getKey();
+
+ /**
+ * @param element to deduce type for - using only LOCAL info. THIS IS MOST CRUCIAL ASPECT TO FOLLOW
+ * @return type for element, null if no insight. You can return a custom signature here to be later decoded by method below.
+ */
+ @Nullable
+ String getType(PsiElement element);
+
+ /**
+ * @param expression Signature expression to decode. You can use PhpIndex.getBySignature() to look up expression internals.
+ * @param project well so you can reach the PhpIndex
+ * @return null if no match
+ */
+ Collection extends PhpNamedElement> getBySignature(String expression, Project project);
+}
+```
+
+Our implementation: includes a Completion contributor for the parameter values too.
+
+```java
+/**
+ */
+public class PhpStaticFactoryTypeProvider extends CompletionContributor implements PhpTypeProvider2 {
+
+ private static final Key>>> STATIC_FACTORY_TYPE_MAP =
+ new Key>>>("STATIC_FACTORY_TYPE_MAP");
+
+ @Override
+ public char getKey() {
+ return 'S';
+ }
+
+ @Nullable
+ @Override
+ public String getType(PsiElement e) {
+ if (e instanceof MethodReference && ((MethodReference)e).isStatic()) {
+ Map> methods = getStaticMethodTypesMap(e.getProject());
+ String refSignature = ((MethodReference)e).getSignature();
+ if (methods.containsKey(refSignature)) {
+ PsiElement[] parameters = ((MethodReference)e).getParameters();
+ if (parameters.length > 0) {
+ PsiElement parameter = parameters[0];
+ if (parameter instanceof StringLiteralExpression) {
+ String param = ((StringLiteralExpression)parameter).getContents();
+ if (StringUtil.isNotEmpty(param)) return refSignature + "." + param;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Collection extends PhpNamedElement> getBySignature(String expression, Project project) {
+ Map> methods = getStaticMethodTypesMap(project);
+ int dot = expression.lastIndexOf('.');
+ String refSignature = expression.substring(0, dot);
+ Map types = methods.get(refSignature);
+ if (types != null) {
+ String type = types.get(expression.substring(dot + 1));
+ if (type != null) return PhpIndex.getInstance(project).getAnyByFQN(type);
+ }
+ return Collections.emptySet();
+ }
+
+ synchronized Map> getStaticMethodTypesMap(final Project project) {
+ CachedValue