diff --git a/src/plugins/cmakeprojectmanager/cmakestep.cpp b/src/plugins/cmakeprojectmanager/cmakestep.cpp
index 9ed0a67f35883ec8c5da5b361c978499a3094865..b914b51b2c1446c2ad7b9f7a45367611bf93c3cd 100644
--- a/src/plugins/cmakeprojectmanager/cmakestep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakestep.cpp
@@ -57,8 +57,14 @@ bool CMakeStep::init(const QString &buildConfiguration)
     setEnabled(buildConfiguration, true);
     setWorkingDirectory(buildConfiguration, m_pro->buildDirectory(buildConfiguration));
     setCommand(buildConfiguration, "cmake"); // TODO give full path here?
+
     QString sourceDir = QFileInfo(m_pro->file()->fileName()).absolutePath();
-    setArguments(buildConfiguration, QStringList() << sourceDir << "-GUnix Makefiles"); // TODO
+    setArguments(buildConfiguration,
+                 QStringList()
+                 << sourceDir
+                 << "-GUnix Makefiles"
+                 << value(buildConfiguration, "userArguments").toStringList()); // TODO
+
     setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration));
     return AbstractProcessStep::init(buildConfiguration);
 }
@@ -93,6 +99,16 @@ bool CMakeStep::immutable() const
     return true;
 }
 
+QString CMakeStep::userArguments(const QString &buildConfiguration) const
+{
+    return ProjectExplorer::Environment::joinArgumentList(value(buildConfiguration, "userArguments").toStringList());
+}
+
+void CMakeStep::setUserArguments(const QString &buildConfiguration, const QString &arguments)
+{
+    setValue(buildConfiguration, "userArguments", ProjectExplorer::Environment::parseCombinedArgString(arguments));
+}
+
 //
 // CMakeBuildStepConfigWidget
 //
@@ -104,6 +120,7 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeStep *cmakeStep)
     setLayout(fl);
     m_arguments = new QLineEdit(this);
     fl->addRow("Additional arguments", m_arguments);
+    connect(m_arguments, SIGNAL(textChanged(QString)), this, SLOT(argumentsLineEditChanged()));
 }
 
 QString CMakeBuildStepConfigWidget::displayName() const
@@ -111,9 +128,17 @@ QString CMakeBuildStepConfigWidget::displayName() const
     return "CMake";
 }
 
-void CMakeBuildStepConfigWidget::init(const QString & /*buildConfiguration */)
+void CMakeBuildStepConfigWidget::init(const QString &buildConfiguration)
+{
+    m_buildConfiguration = buildConfiguration;
+    disconnect(m_arguments, SIGNAL(textChanged(QString)), this, SLOT(argumentsLineEditChanged()));
+    m_arguments->setText(m_cmakeStep->userArguments(buildConfiguration));
+    connect(m_arguments, SIGNAL(textChanged(QString)), this, SLOT(argumentsLineEditChanged()));
+}
+
+void CMakeBuildStepConfigWidget::argumentsLineEditChanged()
 {
-    // TODO
+    m_cmakeStep->setUserArguments(m_buildConfiguration, m_arguments->text());
 }
 
 //
diff --git a/src/plugins/cmakeprojectmanager/cmakestep.h b/src/plugins/cmakeprojectmanager/cmakestep.h
index ec7c9cf9ad4c6b6aae38f610d6444d895c738a55..fdf93c31a83f88441c7ef204fd9a3a4c0c587fd8 100644
--- a/src/plugins/cmakeprojectmanager/cmakestep.h
+++ b/src/plugins/cmakeprojectmanager/cmakestep.h
@@ -60,18 +60,25 @@ public:
     virtual QString displayName();
     virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
     virtual bool immutable() const;
+
+    void setUserArguments(const QString &buildConfiguration, const QString &arguments);
+    QString userArguments(const QString &buildConfiguration) const;
 private:
     CMakeProject *m_pro;
 };
 
 class CMakeBuildStepConfigWidget :public ProjectExplorer::BuildStepConfigWidget
 {
+    Q_OBJECT
 public:
     CMakeBuildStepConfigWidget(CMakeStep *cmakeStep);
     virtual QString displayName() const;
     virtual void init(const QString &buildConfiguration);
+private slots:
+    void argumentsLineEditChanged();
 private:
     CMakeStep *m_cmakeStep;
+    QString m_buildConfiguration;
     QLineEdit *m_arguments;
 };