diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index acf0102d65fdef5855d4b79917f2988fa41d81dd..283f5dd0f681639182fdbebc42ea968025284c9b 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -132,6 +132,11 @@ ProjectExplorer::LocalApplicationRunConfiguration::RunMode CMakeRunConfiguration
 }
 
 QString CMakeRunConfiguration::workingDirectory() const
+{
+    return environment().expandVariables(baseWorkingDirectory());
+}
+
+QString CMakeRunConfiguration::baseWorkingDirectory() const
 {
     if (!m_userWorkingDirectory.isEmpty())
         return m_userWorkingDirectory;
@@ -139,6 +144,11 @@ QString CMakeRunConfiguration::workingDirectory() const
 }
 
 QStringList CMakeRunConfiguration::commandLineArguments() const
+{
+    return environment().expandVariables(baseCommandLineArguments());
+}
+
+QStringList CMakeRunConfiguration::baseCommandLineArguments() const
 {
     return Utils::Environment::parseCombinedArgString(m_arguments);
 }
@@ -155,7 +165,7 @@ void CMakeRunConfiguration::setExecutable(const QString &executable)
 
 void CMakeRunConfiguration::setWorkingDirectory(const QString &wd)
 {
-    const QString & oldWorkingDirectory = workingDirectory();
+    const QString &oldWorkingDirectory = workingDirectory();
 
     m_workingDirectory = wd;
 
@@ -326,14 +336,14 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *
     fl->setMargin(0);
     fl->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
     QLineEdit *argumentsLineEdit = new QLineEdit();
-    argumentsLineEdit->setText(Utils::Environment::joinArgumentList(cmakeRunConfiguration->commandLineArguments()));
+    argumentsLineEdit->setText(Utils::Environment::joinArgumentList(cmakeRunConfiguration->baseCommandLineArguments()));
     connect(argumentsLineEdit, SIGNAL(textChanged(QString)),
             this, SLOT(setArguments(QString)));
     fl->addRow(tr("Arguments:"), argumentsLineEdit);
 
     m_workingDirectoryEdit = new Utils::PathChooser();
     m_workingDirectoryEdit->setBaseDirectory(m_cmakeRunConfiguration->target()->project()->projectDirectory());
-    m_workingDirectoryEdit->setPath(m_cmakeRunConfiguration->workingDirectory());
+    m_workingDirectoryEdit->setPath(m_cmakeRunConfiguration->baseWorkingDirectory());
     m_workingDirectoryEdit->setExpectedKind(Utils::PathChooser::Directory);
     m_workingDirectoryEdit->setPromptDialogTitle(tr("Select Working Directory"));
 
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
index 0e9198e23db6d1c7d680858d7484cdd0f4e80258..09b25d6ba51f9b48047828290ecf497c9fb45934 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
@@ -104,6 +104,8 @@ protected:
     QString defaultDisplayName() const;
 
 private:
+    QString baseWorkingDirectory() const;
+    QStringList baseCommandLineArguments() const;
     void ctor();
 
     enum BaseEnvironmentBase { CleanEnvironmentBase = 0,
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index a239d3ac28e134f2221b5655c65435b0362b82d5..69f739b85002401989072c58a861e65e2e97a7d1 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -148,9 +148,9 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
 
     sp.startMode = StartInternal;
     sp.environment = rc->environment().toStringList();
-    sp.workingDirectory = rc->environment().expandVariables(rc->workingDirectory());
-    sp.executable = rc->environment().searchInPath(rc->executable(), QStringList() << sp.workingDirectory);
-    sp.processArgs = rc->environment().expandVariables(rc->commandLineArguments());
+    sp.workingDirectory = rc->workingDirectory();
+    sp.executable = rc->executable();
+    sp.processArgs = rc->commandLineArguments();
     sp.toolChainType = rc->toolChainType();
     sp.useTerminal = rc->runMode() == LocalApplicationRunConfiguration::Console;
     sp.dumperLibrary = rc->dumperLibrary();
diff --git a/src/plugins/projectexplorer/applicationrunconfiguration.cpp b/src/plugins/projectexplorer/applicationrunconfiguration.cpp
index bdd0fbc85ae55e9d8d63ff526d0f59a4a599a794..3ef50e961e6036d7770a31741cef4a0bf5bb75b3 100644
--- a/src/plugins/projectexplorer/applicationrunconfiguration.cpp
+++ b/src/plugins/projectexplorer/applicationrunconfiguration.cpp
@@ -95,13 +95,13 @@ LocalApplicationRunControl::LocalApplicationRunControl(LocalApplicationRunConfig
     : RunControl(rc, mode)
 {
     Utils::Environment env = rc->environment();
-    QString dir = env.expandVariables(rc->workingDirectory());
+    QString dir = rc->workingDirectory();
     m_applicationLauncher.setEnvironment(env.toStringList());
     m_applicationLauncher.setWorkingDirectory(dir);
 
-    m_executable = env.searchInPath(rc->executable(), QStringList() << dir);
+    m_executable = rc->executable();
     m_runMode = static_cast<ApplicationLauncher::Mode>(rc->runMode());
-    m_commandLineArguments = env.expandVariables(rc->commandLineArguments());
+    m_commandLineArguments = rc->commandLineArguments();
 
     connect(&m_applicationLauncher, SIGNAL(appendMessage(QString,bool)),
             this, SLOT(slotAppendMessage(QString,bool)));
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 475b24f7ef8cd114c2b7e8e44d250b9020e23963..a72c44dd74d2ccc980611b09ea8d72fb546ed386 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -281,8 +281,8 @@ void CustomExecutableConfigurationWidget::changed()
     if (m_ignoreChange)
         return;
     m_executableChooser->setPath(executable);
-    m_commandLineArgumentsLineEdit->setText(Utils::Environment::joinArgumentList(m_runConfiguration->commandLineArguments()));
-    m_workingDirectory->setPath(m_runConfiguration->workingDirectory());
+    m_commandLineArgumentsLineEdit->setText(Utils::Environment::joinArgumentList(m_runConfiguration->baseCommandLineArguments()));
+    m_workingDirectory->setPath(m_runConfiguration->baseWorkingDirectory());
     m_useTerminalCheck->setChecked(m_runConfiguration->runMode() == LocalApplicationRunConfiguration::Console);
 }
 
@@ -343,7 +343,7 @@ void CustomExecutableRunConfiguration::activeBuildConfigurationChanged()
 QString CustomExecutableRunConfiguration::executable() const
 {
     Utils::Environment env = environment();
-    QString exec = env.searchInPath(m_executable, QStringList() << env.expandVariables(workingDirectory()));
+    QString exec = env.searchInPath(m_executable, QStringList() << workingDirectory());
 
     if (exec.isEmpty() || !QFileInfo(exec).exists()) {
         // Oh the executable doesn't exists, ask the user.
@@ -395,11 +395,22 @@ LocalApplicationRunConfiguration::RunMode CustomExecutableRunConfiguration::runM
 }
 
 QString CustomExecutableRunConfiguration::workingDirectory() const
+{
+    return environment().expandVariables(baseWorkingDirectory());
+}
+
+QString CustomExecutableRunConfiguration::baseWorkingDirectory() const
 {
     return m_workingDirectory;
 }
 
+
 QStringList CustomExecutableRunConfiguration::commandLineArguments() const
+{
+    return environment().expandVariables(baseCommandLineArguments());
+}
+
+QStringList CustomExecutableRunConfiguration::baseCommandLineArguments() const
 {
     return m_cmdArguments;
 }
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
index ed413867f9570a8cdbe3b44eb8c2439795fcf3f2..7be085fb4edae041598c82fd66bbda2d8ac176a1 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
@@ -124,6 +124,8 @@ private:
 
     void setExecutable(const QString &executable);
     void setCommandLineArguments(const QString &commandLineArguments);
+    QStringList baseCommandLineArguments() const;
+    QString baseWorkingDirectory() const;
     void setWorkingDirectory(const QString &workingDirectory);
     void setUserName(const QString &name);
     void setRunMode(RunMode runMode);
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index b5fe3731ea8fad7676de56ca92d098205849320e..be286be1ab9c46e4221f2be7408662e15331a4ad 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -201,12 +201,12 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
     toplayout->addRow(tr("Executable:"), m_executableLineEdit);
 
     QLabel *argumentsLabel = new QLabel(tr("Arguments:"), this);
-    m_argumentsLineEdit = new QLineEdit(Utils::Environment::joinArgumentList(qt4RunConfiguration->commandLineArguments()), this);
+    m_argumentsLineEdit = new QLineEdit(Utils::Environment::joinArgumentList(qt4RunConfiguration->baseCommandLineArguments()), this);
     argumentsLabel->setBuddy(m_argumentsLineEdit);
     toplayout->addRow(argumentsLabel, m_argumentsLineEdit);
 
     m_workingDirectoryEdit = new Utils::PathChooser(this);
-    m_workingDirectoryEdit->setPath(m_qt4RunConfiguration->workingDirectory());
+    m_workingDirectoryEdit->setPath(m_qt4RunConfiguration->baseWorkingDirectory());
     m_workingDirectoryEdit->setBaseDirectory(m_qt4RunConfiguration->target()->project()->projectDirectory());
     m_workingDirectoryEdit->setExpectedKind(Utils::PathChooser::Directory);
     m_workingDirectoryEdit->setEnvironment(m_qt4RunConfiguration->environment());
@@ -442,7 +442,7 @@ void Qt4RunConfigurationWidget::effectiveTargetInformationChanged()
     if (m_isShown) {
         m_executableLineEdit->setText(QDir::toNativeSeparators(m_qt4RunConfiguration->executable()));
         m_ignoreChange = true;
-        m_workingDirectoryEdit->setPath(QDir::toNativeSeparators(m_qt4RunConfiguration->workingDirectory()));
+        m_workingDirectoryEdit->setPath(QDir::toNativeSeparators(m_qt4RunConfiguration->baseWorkingDirectory()));
         m_ignoreChange = false;
     }
 }
@@ -524,6 +524,11 @@ void Qt4RunConfiguration::setUsingDyldImageSuffix(bool state)
 }
 
 QString Qt4RunConfiguration::workingDirectory() const
+{
+    return environment().expandVariables(baseWorkingDirectory());
+}
+
+QString Qt4RunConfiguration::baseWorkingDirectory() const
 {
     // if the user overrode us, then return his working directory
     if (m_userSetWokingDirectory)
@@ -537,6 +542,12 @@ QString Qt4RunConfiguration::workingDirectory() const
     return ti.workingDir;
 }
 
+
+QStringList Qt4RunConfiguration::baseCommandLineArguments() const
+{
+    return environment().expandVariables(commandLineArguments());
+}
+
 QStringList Qt4RunConfiguration::commandLineArguments() const
 {
     return m_commandLineArguments;
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index 92db66160056f166c8e3d8bf66b639171f7c6aab..1c6ee44cd7d1a139e6cdfff204c0d8248051ad1c 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -118,6 +118,8 @@ protected:
     virtual bool fromMap(const QVariantMap &map);
 
 private:
+    QString baseWorkingDirectory() const;
+    QStringList baseCommandLineArguments() const;
     enum BaseEnvironmentBase { CleanEnvironmentBase = 0,
                                SystemEnvironmentBase = 1,
                                BuildEnvironmentBase  = 2 };