diff --git a/DependencyInjection/Factory/FtpAdapterFactory.php b/DependencyInjection/Factory/FtpAdapterFactory.php
new file mode 100644
index 0000000..c26ff36
--- /dev/null
+++ b/DependencyInjection/Factory/FtpAdapterFactory.php
@@ -0,0 +1,64 @@
+setDefinition($id, new DefinitionDecorator('knp_gaufrette.adapter.ftp'))
+ ->addArgument($config['directory'])
+ ->addArgument($config['host'])
+ ->addArgument($config['username'])
+ ->addArgument($config['password'])
+ ->addArgument($config['port'])
+ ->addArgument($config['passive'])
+ ->addArgument($config['create'])
+ ->addArgument($config['mode'])
+ ;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ function getKey()
+ {
+ return 'ftp';
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ function addConfiguration(NodeDefinition $builder)
+ {
+ $builder
+ ->children()
+ ->scalarNode('directory')->isRequired()->end()
+ ->scalarNode('host')->isRequired()->end()
+ ->scalarNode('port')->defaultValue(21)->end()
+ ->scalarNode('username')->defaultNull()->end()
+ ->scalarNode('password')->defaultNull()->end()
+ ->booleanNode('passive')->defaultFalse()->end()
+ ->booleanNode('create')->defaultFalse()->end()
+ ->scalarNode('mode')
+ ->defaultValue(FTP_ASCII)
+ ->beforeNormalization()
+ ->ifString()
+ ->then(function($v) { return constant($v); })
+ ->end()
+ ->end()
+ ;
+ }
+}
diff --git a/README.markdown b/README.markdown
index c2ad49e..7b9a3b7 100644
--- a/README.markdown
+++ b/README.markdown
@@ -284,3 +284,34 @@ knp_gaufrette:
```
[gaufrette-homepage]: https://github.com/KnpLabs/Gaufrette
+
+## Ftp
+
+Adapter for FTP.
+
+### Parameters
+
+ * `directory` The directory of the filesystem *(required)*
+ * `host` FTP host *(required)*
+ * `username` FTP username *(default null)*
+ * `password` FTP password *(default null)*
+ * `port` FTP port *(default 21)*
+ * `passive` FTP passive mode *(default false)*
+ * `create` Whether to create the directory if it does not exist *(default false)*
+ * `mode` FTP transfer mode *(defaut FTP_ASCII)*
+
+### Example
+
+``` yaml
+# app/config/config.yml
+knp_gaufrette:
+ adapters:
+ foo:
+ ftp:
+ host: example.com
+ username: user
+ password: pass
+ directory: /example/ftp
+ create: true
+ mode: FTP_BINARY
+```
diff --git a/Resources/config/adapter_factories.xml b/Resources/config/adapter_factories.xml
index 08668a9..1ecddc5 100644
--- a/Resources/config/adapter_factories.xml
+++ b/Resources/config/adapter_factories.xml
@@ -29,6 +29,9 @@
+
+
+
diff --git a/Resources/config/gaufrette.xml b/Resources/config/gaufrette.xml
index ecb16b8..dc75fef 100644
--- a/Resources/config/gaufrette.xml
+++ b/Resources/config/gaufrette.xml
@@ -26,6 +26,7 @@
+