diff --git a/src/app/qgsprojectproperties.cpp b/src/app/qgsprojectproperties.cpp
index 8fec88120f7..9d90fc97bd8 100644
--- a/src/app/qgsprojectproperties.cpp
+++ b/src/app/qgsprojectproperties.cpp
@@ -229,6 +229,20 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
   bool addWktGeometry = QgsProject::instance()->readBoolEntry( "WMSAddWktGeometry", "/" );
   mAddWktGeometryCheckBox->setChecked( addWktGeometry );
 
+  //WMS maxWidth / maxHeight
+  mMaxWidthLineEdit->setValidator( new QIntValidator( mMaxWidthLineEdit ) );
+  int maxWidth = QgsProject::instance()->readNumEntry( "WMSMaxWidth", "/", -1 );
+  if ( maxWidth != -1 )
+  {
+    mMaxWidthLineEdit->setText( QString::number( maxWidth ) );
+  }
+  mMaxHeightLineEdit->setValidator( new QIntValidator( mMaxHeightLineEdit ) );
+  int maxHeight = QgsProject::instance()->readNumEntry( "WMSMaxHeight", "/", -1 );
+  if ( maxHeight != -1 )
+  {
+    mMaxHeightLineEdit->setText( QString::number( maxHeight ) );
+  }
+
   QStringList wfsLayerIdList = QgsProject::instance()->readListEntry( "WFSLayers", "/" );
 
   twWFSLayers->setColumnCount( 2 );
@@ -460,6 +474,25 @@ void QgsProjectProperties::apply()
 
   QgsProject::instance()->writeEntry( "WMSAddWktGeometry", "/", mAddWktGeometryCheckBox->isChecked() );
 
+  QString maxWidthText = mMaxWidthLineEdit->text();
+  if ( maxWidthText.isEmpty() )
+  {
+    QgsProject::instance()->removeEntry( "WMSMaxWidth", "/" );
+  }
+  else
+  {
+    QgsProject::instance()->writeEntry( "WMSMaxWidth", "/", maxWidthText.toInt() );
+  }
+  QString maxHeightText = mMaxHeightLineEdit->text();
+  if ( maxHeightText.isEmpty() )
+  {
+    QgsProject::instance()->removeEntry( "WMSMaxHeight", "/" );
+  }
+  else
+  {
+    QgsProject::instance()->writeEntry( "WMSMaxHeight", "/", maxHeightText.toInt() );
+  }
+
   QStringList wfsLayerList;
   for ( int i = 0; i < twWFSLayers->rowCount(); i++ )
   {
diff --git a/src/mapserver/qgsconfigparser.cpp b/src/mapserver/qgsconfigparser.cpp
index e8398baf3e9..3209ad883be 100644
--- a/src/mapserver/qgsconfigparser.cpp
+++ b/src/mapserver/qgsconfigparser.cpp
@@ -31,6 +31,8 @@ QgsConfigParser::QgsConfigParser()
     : mFallbackParser( 0 )
     , mScaleDenominator( 0 )
     , mOutputUnits( QgsMapRenderer::Millimeters )
+    , mMaxWidth( -1 )
+    , mMaxHeight( -1 )
 {
   setDefaultLegendSettings();
   mSelectionColor = QColor( 255, 255, 0 ); //yellow opaque is default selection color
diff --git a/src/mapserver/qgsconfigparser.h b/src/mapserver/qgsconfigparser.h
index a165e8bf3e6..682463db6a1 100644
--- a/src/mapserver/qgsconfigparser.h
+++ b/src/mapserver/qgsconfigparser.h
@@ -121,6 +121,9 @@ class QgsConfigParser
     QColor selectionColor() const { return mSelectionColor; }
     void setSelectionColor( const QColor& c ) { mSelectionColor = c; }
 
+    int maxWidth() const { return mMaxWidth; }
+    int maxHeight() const { return mMaxHeight; }
+
   protected:
     /**Parser to forward not resolved requests (e.g. SLD parser based on user request might have a fallback parser with admin configuration)*/
     QgsConfigParser* mFallbackParser;
@@ -160,6 +163,10 @@ class QgsConfigParser
 
     QColor mSelectionColor;
 
+    //maximum width/height for the GetMap request. Disabled by default (-1)
+    int mMaxWidth;
+    int mMaxHeight;
+
     /**Transforms layer extent to epsg 4326 and appends ExGeographicBoundingBox and BoundingBox elements to the layer element*/
     void appendLayerBoundingBoxes( QDomElement& layerElem, QDomDocument& doc, const QgsRectangle& layerExtent, const QgsCoordinateReferenceSystem& layerCRS ) const;
 
diff --git a/src/mapserver/qgsprojectparser.cpp b/src/mapserver/qgsprojectparser.cpp
index e1dfdbb8b6f..d4fe7737e27 100644
--- a/src/mapserver/qgsprojectparser.cpp
+++ b/src/mapserver/qgsprojectparser.cpp
@@ -45,6 +45,7 @@ QgsProjectParser::QgsProjectParser( QDomDocument* xmlDoc, const QString& filePat
   mOutputUnits = QgsMapRenderer::Millimeters;
   setLegendParametersFromProject();
   setSelectionColor();
+  setMaxWidthHeight();
 
   //accelerate search for layers and groups
   if ( mXMLDoc )
@@ -1439,6 +1440,27 @@ void QgsProjectParser::serviceCapabilities( QDomElement& parentElement, QDomDocu
   }
 
   serviceElem.appendChild( contactInfoElem );
+
+  //MaxWidth / MaxHeight for WMS 1.3
+  QString version = doc.documentElement().attribute( "version" );
+  if ( version != "1.1.1" )
+  {
+    if ( mMaxWidth != -1 )
+    {
+      QDomElement maxWidthElem = doc.createElement( "MaxWidth" );
+      QDomText maxWidthText = doc.createTextNode( QString::number( mMaxWidth ) );
+      maxWidthElem.appendChild( maxWidthText );
+      serviceElem.appendChild( maxWidthElem );
+    }
+    if ( mMaxHeight != -1 )
+    {
+      QDomElement maxHeightElem = doc.createElement( "MaxHeight" );
+      QDomText maxHeightText = doc.createTextNode( QString::number( mMaxHeight ) );
+      maxHeightElem.appendChild( maxHeightText );
+      serviceElem.appendChild( maxHeightElem );
+    }
+  }
+
   parentElement.appendChild( serviceElem );
 }
 
@@ -1541,6 +1563,31 @@ void QgsProjectParser::setSelectionColor()
   mSelectionColor = QColor( red, green, blue, alpha );
 }
 
+void QgsProjectParser::setMaxWidthHeight()
+{
+  if ( mXMLDoc )
+  {
+    QDomElement qgisElem = mXMLDoc->documentElement();
+    if ( !qgisElem.isNull() )
+    {
+      QDomElement propertiesElem = qgisElem.firstChildElement( "properties" );
+      if ( !propertiesElem.isNull() )
+      {
+        QDomElement maxWidthElem = propertiesElem.firstChildElement( "WMSMaxWidth" );
+        if ( !maxWidthElem.isNull() )
+        {
+          mMaxWidth = maxWidthElem.text().toInt();
+        }
+        QDomElement maxHeightElem = propertiesElem.firstChildElement( "WMSMaxHeight" );
+        if ( !maxHeightElem.isNull() )
+        {
+          mMaxHeight = maxHeightElem.text().toInt();
+        }
+      }
+    }
+  }
+}
+
 const QgsCoordinateReferenceSystem& QgsProjectParser::projectCRS() const
 {
   //mapcanvas->destinationsrs->spatialrefsys->authid
diff --git a/src/mapserver/qgsprojectparser.h b/src/mapserver/qgsprojectparser.h
index d4152a92610..b5138005a46 100644
--- a/src/mapserver/qgsprojectparser.h
+++ b/src/mapserver/qgsprojectparser.h
@@ -167,6 +167,8 @@ class QgsProjectParser: public QgsConfigParser
 
     /**Reads selection color from project and sets it to QgsConfigParser::mSelectionColor*/
     void setSelectionColor();
+    /**Reads maxWidth / maxHeight from project and sets it to QgsConfigParser::mMaxWidth / mMaxHeight*/
+    void setMaxWidthHeight();
 };
 
 #endif // QGSPROJECTPARSER_H
diff --git a/src/mapserver/qgswmsserver.cpp b/src/mapserver/qgswmsserver.cpp
index 1de6a91099c..9cd9074c2d2 100644
--- a/src/mapserver/qgswmsserver.cpp
+++ b/src/mapserver/qgswmsserver.cpp
@@ -669,6 +669,10 @@ QImage* QgsWMSServer::printCompositionToImage( QgsComposition* c ) const
 
 QImage* QgsWMSServer::getMap()
 {
+  if ( !checkMaximumWidthHeight() )
+  {
+    throw QgsMapServiceException( "Size error", "The requested map size is too large" );
+  }
   QStringList layersList, stylesList, layerIdList;
   QImage* theImage = initializeRendering( layersList, stylesList, layerIdList );
 
@@ -1994,3 +1998,31 @@ void QgsWMSServer::clearFeatureSelections( const QStringList& layerIds ) const
 
   return;
 }
+
+bool QgsWMSServer::checkMaximumWidthHeight() const
+{
+  //test if maxWidth / maxHeight set and WIDTH / HEIGHT parameter is in the range
+  if ( mConfigParser->maxWidth() != -1 )
+  {
+    QMap<QString, QString>::const_iterator widthIt = mParameterMap.find( "WIDTH" );
+    if ( widthIt != mParameterMap.constEnd() )
+    {
+      if ( widthIt->toInt() > mConfigParser->maxWidth() )
+      {
+        return false;
+      }
+    }
+  }
+  if ( mConfigParser->maxHeight() != -1 )
+  {
+    QMap<QString, QString>::const_iterator heightIt = mParameterMap.find( "HEIGHT" );
+    if ( heightIt != mParameterMap.constEnd() )
+    {
+      if ( heightIt->toInt() > mConfigParser->maxHeight() )
+      {
+        return false;
+      }
+    }
+  }
+  return true;
+}
diff --git a/src/mapserver/qgswmsserver.h b/src/mapserver/qgswmsserver.h
index 79ef589331a..a87cd2f2bcb 100644
--- a/src/mapserver/qgswmsserver.h
+++ b/src/mapserver/qgswmsserver.h
@@ -163,6 +163,10 @@ class QgsWMSServer
 
     void appendFormats( QDomDocument &doc, QDomElement &elem, const QStringList &formats );
 
+    /**Checks WIDTH/HEIGHT values agains MaxWidth and MaxHeight
+      @return true if width/height values are okay*/
+    bool checkMaximumWidthHeight() const;
+
     /**Map containing the WMS parameters*/
     QMap<QString, QString> mParameterMap;
     QgsConfigParser* mConfigParser;
diff --git a/src/ui/qgsprojectpropertiesbase.ui b/src/ui/qgsprojectpropertiesbase.ui
index cd58ba453c9..ff758a5ff4a 100644
--- a/src/ui/qgsprojectpropertiesbase.ui
+++ b/src/ui/qgsprojectpropertiesbase.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>676</width>
-    <height>522</height>
+    <width>571</width>
+    <height>448</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -368,7 +368,7 @@
        <string>OWS Server</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_3">
-       <item row="0" column="0" rowspan="2">
+       <item row="0" column="0">
         <widget class="QScrollArea" name="scrollArea">
          <property name="widgetResizable">
           <bool>true</bool>
@@ -377,13 +377,13 @@
           <property name="geometry">
            <rect>
             <x>0</x>
-            <y>0</y>
-            <width>616</width>
-            <height>538</height>
+            <y>-271</y>
+            <width>526</width>
+            <height>668</height>
            </rect>
           </property>
-          <layout class="QGridLayout" name="gridLayout_7">
-           <item row="0" column="0" colspan="2">
+          <layout class="QGridLayout" name="gridLayout">
+           <item row="0" column="0">
             <widget class="QGroupBox" name="grpOWSServiceCapabilities">
              <property name="title">
               <string>Service Capabilitities</string>
@@ -483,148 +483,158 @@
              </layout>
             </widget>
            </item>
-           <item row="1" column="0" colspan="2">
+           <item row="1" column="0">
             <widget class="QGroupBox" name="grpWMSCapabilities">
              <property name="title">
               <string>WMS Capabilitities</string>
              </property>
              <layout class="QGridLayout" name="gridLayout_10">
-           <item row="1" column="0">
-            <widget class="QGroupBox" name="grpWMSExt">
-             <property name="title">
-              <string>Advertised Extent</string>
-             </property>
-             <property name="checkable">
-              <bool>true</bool>
-             </property>
-             <property name="checked">
-              <bool>false</bool>
-             </property>
-             <layout class="QGridLayout" name="gridLayout_4">
-              <item row="0" column="0">
-               <widget class="QLabel" name="label_11">
-                <property name="text">
-                 <string>Min. X</string>
-                </property>
-                <property name="buddy">
-                 <cstring>mWMSExtMinX</cstring>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="1">
-               <widget class="QLineEdit" name="mWMSExtMinX">
-                <property name="text">
-                 <string/>
-                </property>
-               </widget>
-              </item>
               <item row="1" column="0">
-               <widget class="QLabel" name="label_12">
-                <property name="text">
-                 <string>Min. Y</string>
+               <widget class="QGroupBox" name="grpWMSExt">
+                <property name="title">
+                 <string>Advertised Extent</string>
                 </property>
-                <property name="buddy">
-                 <cstring>mWMSExtMinY</cstring>
+                <property name="checkable">
+                 <bool>true</bool>
                 </property>
+                <property name="checked">
+                 <bool>false</bool>
+                </property>
+                <layout class="QGridLayout" name="gridLayout_4">
+                 <item row="0" column="0">
+                  <widget class="QLabel" name="label_11">
+                   <property name="text">
+                    <string>Min. X</string>
+                   </property>
+                   <property name="buddy">
+                    <cstring>mWMSExtMinX</cstring>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="0" column="1">
+                  <widget class="QLineEdit" name="mWMSExtMinX">
+                   <property name="text">
+                    <string/>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="1" column="0">
+                  <widget class="QLabel" name="label_12">
+                   <property name="text">
+                    <string>Min. Y</string>
+                   </property>
+                   <property name="buddy">
+                    <cstring>mWMSExtMinY</cstring>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="1" column="1">
+                  <widget class="QLineEdit" name="mWMSExtMinY">
+                   <property name="text">
+                    <string/>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="2" column="0">
+                  <widget class="QLabel" name="label_9">
+                   <property name="text">
+                    <string>Max. X</string>
+                   </property>
+                   <property name="buddy">
+                    <cstring>mWMSExtMaxX</cstring>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="2" column="1">
+                  <widget class="QLineEdit" name="mWMSExtMaxX">
+                   <property name="text">
+                    <string/>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="3" column="0">
+                  <widget class="QLabel" name="label_10">
+                   <property name="text">
+                    <string>Max. Y</string>
+                   </property>
+                   <property name="buddy">
+                    <cstring>mWMSExtMaxY</cstring>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="3" column="1">
+                  <widget class="QLineEdit" name="mWMSExtMaxY">
+                   <property name="text">
+                    <string/>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="4" column="0" colspan="2">
+                  <widget class="QPushButton" name="pbnWMSExtCanvas">
+                   <property name="text">
+                    <string>Use Current Canvas Extent</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="5" column="0" colspan="2">
+                  <spacer name="verticalSpacer">
+                   <property name="orientation">
+                    <enum>Qt::Vertical</enum>
+                   </property>
+                   <property name="sizeHint" stdset="0">
+                    <size>
+                     <width>20</width>
+                     <height>40</height>
+                    </size>
+                   </property>
+                  </spacer>
+                 </item>
+                </layout>
                </widget>
               </item>
               <item row="1" column="1">
-               <widget class="QLineEdit" name="mWMSExtMinY">
-                <property name="text">
-                 <string/>
+               <widget class="QGroupBox" name="grpWMSList">
+                <property name="title">
+                 <string>Coordinate Systems Restrictions</string>
                 </property>
+                <property name="checkable">
+                 <bool>true</bool>
+                </property>
+                <property name="checked">
+                 <bool>false</bool>
+                </property>
+                <layout class="QGridLayout" name="gridLayout_5">
+                 <item row="0" column="0" colspan="3">
+                  <widget class="QListWidget" name="mWMSList"/>
+                 </item>
+                 <item row="1" column="0">
+                  <widget class="QPushButton" name="pbnWMSAddSRS">
+                   <property name="text">
+                    <string>Add</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="1" column="2">
+                  <widget class="QPushButton" name="pbnWMSRemoveSRS">
+                   <property name="text">
+                    <string>Remove</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="1" column="1">
+                  <widget class="QPushButton" name="pbnWMSSetUsedSRS">
+                   <property name="text">
+                    <string>Used</string>
+                   </property>
+                  </widget>
+                 </item>
+                </layout>
                </widget>
               </item>
               <item row="2" column="0">
-               <widget class="QLabel" name="label_9">
+               <widget class="QCheckBox" name="mAddWktGeometryCheckBox">
                 <property name="text">
-                 <string>Max. X</string>
-                </property>
-                <property name="buddy">
-                 <cstring>mWMSExtMaxX</cstring>
-                </property>
-               </widget>
-              </item>
-              <item row="2" column="1">
-               <widget class="QLineEdit" name="mWMSExtMaxX">
-                <property name="text">
-                 <string/>
-                </property>
-               </widget>
-              </item>
-              <item row="3" column="0">
-               <widget class="QLabel" name="label_10">
-                <property name="text">
-                 <string>Max. Y</string>
-                </property>
-                <property name="buddy">
-                 <cstring>mWMSExtMaxY</cstring>
-                </property>
-               </widget>
-              </item>
-              <item row="3" column="1">
-               <widget class="QLineEdit" name="mWMSExtMaxY">
-                <property name="text">
-                 <string/>
-                </property>
-               </widget>
-              </item>
-              <item row="4" column="0" colspan="2">
-               <widget class="QPushButton" name="pbnWMSExtCanvas">
-                <property name="text">
-                 <string>Use Current Canvas Extent</string>
-                </property>
-               </widget>
-              </item>
-              <item row="5" column="0" colspan="2">
-               <spacer name="verticalSpacer">
-                <property name="orientation">
-                 <enum>Qt::Vertical</enum>
-                </property>
-                <property name="sizeHint" stdset="0">
-                 <size>
-                  <width>20</width>
-                  <height>40</height>
-                 </size>
-                </property>
-               </spacer>
-              </item>
-             </layout>
-            </widget>
-           </item>
-           <item row="1" column="1">
-            <widget class="QGroupBox" name="grpWMSList">
-             <property name="title">
-              <string>Coordinate Systems Restrictions</string>
-             </property>
-             <property name="checkable">
-              <bool>true</bool>
-             </property>
-             <property name="checked">
-              <bool>false</bool>
-             </property>
-             <layout class="QGridLayout" name="gridLayout_5">
-              <item row="0" column="0" colspan="3">
-               <widget class="QListWidget" name="mWMSList"/>
-              </item>
-              <item row="1" column="0">
-               <widget class="QPushButton" name="pbnWMSAddSRS">
-                <property name="text">
-                 <string>Add</string>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="2">
-               <widget class="QPushButton" name="pbnWMSRemoveSRS">
-                <property name="text">
-                 <string>Remove</string>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="1">
-               <widget class="QPushButton" name="pbnWMSSetUsedSRS">
-                <property name="text">
-                 <string>Used</string>
+                 <string>Add WKT geometry to feature info response</string>
                 </property>
                </widget>
               </item>
@@ -632,16 +642,30 @@
             </widget>
            </item>
            <item row="2" column="0">
-            <widget class="QCheckBox" name="mAddWktGeometryCheckBox">
-             <property name="text">
-              <string>Add WKT geometry to feature info response</string>
-             </property>
-            </widget>
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <item>
+              <widget class="QLabel" name="mMaxWidthLabel">
+               <property name="text">
+                <string>Maximum width</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="mMaxWidthLineEdit"/>
+             </item>
+             <item>
+              <widget class="QLabel" name="mMaxHeightLabel">
+               <property name="text">
+                <string>Maximum height</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="mMaxHeightLineEdit"/>
+             </item>
+            </layout>
            </item>
-             </layout>
-            </widget>
-           </item>
-           <item row="3" column="0" colspan="2">
+           <item row="3" column="0">
             <widget class="QGroupBox" name="grpWFSCapabilities">
              <property name="title">
               <string>WFS Capabilitities</string>