[qgis] 01/03: Add patches from upstream release-2_8 branch.

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Mon Apr 27 16:03:18 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository qgis.

commit d860cf83d0a26161feed7ce7dfc9ab8159f8a6a8
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Mon Apr 27 16:09:10 2015 +0200

    Add patches from upstream release-2_8 branch.
---
 debian/changelog                                   |    6 +
 ...ing-3-identical-label-candidates-in-offse.patch |   38 +
 ...FS-GetFeature-joined-fields-not-are-not-r.patch |   48 +
 ...ate-DatumTransformInfo-on-layerCrsChanged.patch |   65 +
 .../0001-Backport-of-dangling-pointer-bug.patch    |   29 +
 ...-missing-type-definitions-in-delimited-te.patch |   27 +
 .../0001-Backport-of-pull-request-1932.patch       |   25 +
 ...1-Better-default-for-COMPRESSTYPE-in-GDAL.patch |   45 +
 ...tter-default-for-a-Processing-SAGA-module.patch |   22 +
 ...ng-for-GDAL-outputs-partial-fix-for-http-.patch |  278 +++
 .../0001-Better-output-names-for-SAGA-models.patch |  141 ++
 ...se-attribute-dialog-when-layer-is-removed.patch |   22 +
 ...ets-make-sure-config-can-loaded-from-the-.patch |   48 +
 ...dangling-pointers-in-QgisApp-mPrintCompos.patch |   31 +
 .../patches/0001-Fix-QgsRubberBand-refresh.patch   |  137 ++
 ...erBand-visibility-behavior-followup-37171.patch |  100 +
 .../0001-Fix-QgsWmsDpiMode-enum-declaration.patch  |   22 +
 ...size-was-incorrectly-stored-in-x-position.patch |   23 +
 ...notation-distance-not-restored-in-dialog-.patch |   21 +
 ...-renderer-not-working-for-reprojected-lay.patch |   52 +
 ...ct-calculation-of-priority-for-diagrams-f.patch |   23 +
 ...alidity-test-in-raster-calculator-fix-112.patch |   22 +
 debian/patches/0001-Fix-primary-key-search.patch   |   34 +
 .../0001-Fix-quoting-of-xfb-run-invocation.patch   |   22 +
 ...dependant-rendering-of-diagrams-fix-10700.patch |   74 +
 ...-min-in-raster-histogram-using-mouse-also.patch |   21 +
 ...t-keys-in-attribute-table-dialog-fix-1227.patch |   73 +
 debian/patches/0001-GRASS-7.0.0-API-change.patch   |   56 +
 ...rash-in-browser-when-opening-GRASS-6-maps.patch |   29 +
 ...-function-called-by-browser-item-fixes-cr.patch |  102 +
 ...ntLocator-discard-geometries-that-cannot-.patch |   65 +
 ...everted-5e1b5a43-because-it-breaks-GRASS-.patch |   27 +
 ...Avoid-consecutive-quotes-when-calling-OTB.patch |   29 +
 ...ndle-non-matching-number-of-WMS-styles-an.patch |   63 +
 ...ataUtils-encode-fix-escape-also-backslash.patch |   28 +
 ...-stop-processing-after-no-REQUEST-excepti.patch |   24 +
 ...st-used-directory-for-raster-save-as-dial.patch |   53 +
 ...v-vars-for-when-gdal-lib-is-bundled-in-ap.patch |  128 +
 ...andardise-use-of-red-minus-icon-fix-12425.patch |  142 ++
 ...001-Update-CatchmentArea-FlowTracing-.txt.patch |   21 +
 .../0001-Update-CatchmentArea-Parallel-.txt.patch  |   20 +
 .../0001-Update-CatchmentArea-Recursive-.txt.patch |   21 +
 ...1-Update-Mac-bundling-for-qgis_server-lib.patch |   63 +
 ...ilevelB-SplineInterpolation-fromGrid-.txt.patch |   21 +
 ...pdate-MultilevelB-SplineInterpolation.txt.patch |   21 +
 .../patches/0001-Update-ShapestoGrid.txt-2.patch   |   22 +
 debian/patches/0001-Update-ShapestoGrid.txt.patch  |   32 +
 .../0001-Update-Slope-Aspect-Curvature.txt.patch   |   31 +
 ...es-to-Processing-algs-fix-for-http-hub.qg.patch |  134 ++
 .../patches/0001-adding-french-translators.patch   |   21 +
 debian/patches/0001-better-option-text.patch       |   21 +
 ...fix-setting-of-contrast-enhancement-for-s.patch |   52 +
 .../0001-doxygen-add-effects-directory.patch       |   21 +
 debian/patches/0001-dxf-export-2.patch             |  176 ++
 ...fix-data-defined-outline-color-of-simple-.patch |   22 +
 debian/patches/0001-dxf-export.patch               |  147 ++
 ...ressions-fix-modulo-0-crashes-fixes-12431.patch |   42 +
 debian/patches/0001-fix-GRASS7-v.generalize.patch  |   21 +
 .../0001-fix-SAGA-contour-lines-from-grid.patch    |   20 +
 ...sterize-when-using-an-existing-raster-lay.patch |   59 +
 ...x-gdal_rasterize-remove-duplicate-options.patch |   87 +
 .../0001-fix-saga-catchment-area-modules.patch     |   60 +
 .../0001-fix-saga-interpolations-modules.patch     |   75 +
 debian/patches/0001-fix-saga-shapes-to-grid.patch  |   33 +
 debian/patches/0001-fix-typo.patch                 |   20 +
 ...lause-when-multiple-features-are-filtered.patch |   79 +
 .../patches/0001-german-translation-update-2.patch | 2438 ++++++++++++++++++++
 .../patches/0001-german-translation-update-3.patch |  199 ++
 ...nter-to-message-in-connection-error-messa.patch |   35 +
 ...nclude-qgslayerdefinition.sip-in-bindings.patch |   50 +
 ...vas-update-sip-bindings-followup-bef4059f.patch |   34 +
 ...ial-use-sdo_relate-for-exact-intersect-fe.patch |   32 +
 ...lect-packagename-and-version-in-nightly-b.patch |   37 +
 ...ta-items-don-t-set-srid-for-geometryless-.patch |   24 +
 ...ovider-also-apply-filterWhereClause-to-fe.patch |   36 +
 ...display-X-and-Y-labels-on-the-scatterplot.patch |   22 +
 ...fix-interpretation-of-oracle-layers-fixes.patch |   63 +
 ...-fix-typo-in-the-algorithm-name-fix-12227.patch |  333 +++
 ...save-last-used-models-scripts-directory-f.patch |   61 +
 ...cessing-set-CRS-for-output-grid-fix-12518.patch |   59 +
 ...l-driver-cleanup-session-connection-when-.patch |   29 +
 .../patches/0001-remove-duplicate-condition.patch  |   25 +
 ...-unused-button-in-categorized-renderer-ui.patch |   49 +
 ...ce-service-wms-from-request-if-not-explic.patch |   31 +
 ...-server-fix-LayerDrawingOrder-fixes-12484.patch |  403 ++++
 ...parsing-of-bbox-numbers-in-scientific-not.patch |  139 ++
 .../0001-update_ts.sh-include-locations.patch      |   22 +
 ...layer-connect-missing-edit-buffer-signals.patch |   46 +
 debian/patches/series                              |   87 +
 debian/qgis-common.links                           |    1 +
 90 files changed, 7792 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 95a7a54..2e858b8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+qgis (2.8.1+dfsg1-1~exp4) UNRELEASED; urgency=medium
+
+  * Add patches from upstream release-2_8 branch.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Mon, 27 Apr 2015 15:43:48 +0200
+
 qgis (2.8.1+dfsg1-1~exp3) experimental; urgency=medium
 
   * Update symbols for armel, armhf, i386, kfreebsd-amd64, kfreebsd-i386,
diff --git a/debian/patches/0001-Avoid-creating-3-identical-label-candidates-in-offse.patch b/debian/patches/0001-Avoid-creating-3-identical-label-candidates-in-offse.patch
new file mode 100644
index 0000000..a0398b0
--- /dev/null
+++ b/debian/patches/0001-Avoid-creating-3-identical-label-candidates-in-offse.patch
@@ -0,0 +1,38 @@
+From f7d99d1e8a038c46cca6d0c3bd6f1d364c945de1 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Wed, 18 Mar 2015 17:54:15 +1100
+Subject: Avoid creating 3 identical label candidates in offset point mode
+Origin: https://github.com/qgis/QGIS/commit/f7d99d1e8a038c46cca6d0c3bd6f1d364c945de1
+
+...should speed up label position calculation
+---
+ src/core/pal/feature.cpp |   10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+--- a/src/core/pal/feature.cpp
++++ b/src/core/pal/feature.cpp
+@@ -279,7 +279,7 @@ namespace pal
+   {
+     Q_UNUSED( scale );
+     Q_UNUSED( delta_width );
+-    int nbp = 3;
++    int nbp = 1;
+     *lPos = new LabelPosition *[nbp];
+ 
+     // get from feature
+@@ -349,15 +349,7 @@ namespace pal
+     lx = x + xdiff;
+     ly = y + ydiff;
+ 
+-//    double offset = label_x / 4;
+-    double offset = 0.0; // don't shift what is supposed to be fixed
+-
+-    // at the center
+     ( *lPos )[0] = new LabelPosition( id, lx, ly, label_x, label_y, angle, cost, this );
+-    // shifted to the sides - with higher cost
+-    cost = 0.0021;
+-    ( *lPos )[1] = new LabelPosition( id, lx + offset, ly, label_x, label_y, angle, cost, this );
+-    ( *lPos )[2] = new LabelPosition( id, lx - offset, ly, label_x, label_y, angle, cost, this );
+     return nbp;
+   }
+ 
diff --git a/debian/patches/0001-BUGFIX-In-WFS-GetFeature-joined-fields-not-are-not-r.patch b/debian/patches/0001-BUGFIX-In-WFS-GetFeature-joined-fields-not-are-not-r.patch
new file mode 100644
index 0000000..00229a2
--- /dev/null
+++ b/debian/patches/0001-BUGFIX-In-WFS-GetFeature-joined-fields-not-are-not-r.patch
@@ -0,0 +1,48 @@
+From 4f36b6572e71ed16f2071081f2f152c1d290b7cb Mon Sep 17 00:00:00 2001
+From: rldhont <rldhont at gmail.com>
+Date: Mon, 30 Mar 2015 21:11:25 +0200
+Subject: [BUGFIX] In WFS GetFeature joined fields not are not returned
+Origin: https://github.com/qgis/QGIS/commit/4f36b6572e71ed16f2071081f2f152c1d290b7cb
+
+In the WFS GetFeature Request, the joined fields are not returned. It's due to
+ the use of provider instead of layer to retrieve all fields.
+
+The correction is to use layer->pendingFields() and layer->pendingAllAttributesList()
+---
+ src/server/qgswfsserver.cpp |   12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+--- a/src/server/qgswfsserver.cpp
++++ b/src/server/qgswfsserver.cpp
+@@ -463,10 +463,12 @@ int QgsWFSServer::getFeature( QgsRequest
+ 
+         QgsFeature feature;
+         QgsAttributeMap featureAttributes;
+-        const QgsFields& fields = provider->fields();
++        //const QgsFields& fields = provider->fields();
++        const QgsFields& fields = layer->pendingFields();
+ 
+         mWithGeom = true;
+-        QgsAttributeList attrIndexes = provider->attributeIndexes();
++        //QgsAttributeList attrIndexes = provider->attributeIndexes();
++        QgsAttributeList attrIndexes = layer->pendingAllAttributesList();
+ 
+         QDomNodeList queryChildNodes = queryElem.childNodes();
+         if ( queryChildNodes.size() )
+@@ -804,12 +806,14 @@ int QgsWFSServer::getFeature( QgsRequest
+ 
+       QgsFeature feature;
+       QgsAttributeMap featureAttributes;
+-      const QgsFields& fields = provider->fields();
++      //const QgsFields& fields = provider->fields();
++      const QgsFields& fields = layer->pendingFields();
+ 
+       //map extent
+       searchRect = layer->extent();
+ 
+-      QgsAttributeList attrIndexes = provider->attributeIndexes();
++      //QgsAttributeList attrIndexes = provider->attributeIndexes();
++      QgsAttributeList attrIndexes = layer->pendingAllAttributesList();
+       if ( mPropertyName != "*" )
+       {
+         QStringList attrList = mPropertyName.split( "," );
diff --git a/debian/patches/0001-BUGFIX-Update-DatumTransformInfo-on-layerCrsChanged.patch b/debian/patches/0001-BUGFIX-Update-DatumTransformInfo-on-layerCrsChanged.patch
new file mode 100644
index 0000000..5460d19
--- /dev/null
+++ b/debian/patches/0001-BUGFIX-Update-DatumTransformInfo-on-layerCrsChanged.patch
@@ -0,0 +1,65 @@
+From bef4059f7c85e4b7e50e820953a044caad41e69e Mon Sep 17 00:00:00 2001
+From: rldhont <rldhont at gmail.com>
+Date: Tue, 31 Mar 2015 10:42:03 +0200
+Subject: [BUGFIX] Update DatumTransformInfo on layerCrsChanged
+Origin: https://github.com/qgis/QGIS/commit/bef4059f7c85e4b7e50e820953a044caad41e69e
+
+The QgsMapCanvas datumTransformInfo is not updated after a layerCrsChanged.
+ This causes a bug in QGIS-Server which does not use the right srcAuthId.
+
+To update QgsMapCanvas datumTransformInfo, the user had to change the map
+ canvas CRS or to disable/enable transform.
+
+This patch add a SLOT to the QgsMapLayer layerCrs Changed SIGNAL to update
+ QgsMapCanvas datumTransformInfo.
+---
+ src/gui/qgsmapcanvas.cpp |   11 +++++++++++
+ src/gui/qgsmapcanvas.h   |    3 +++
+ 2 files changed, 14 insertions(+)
+
+--- a/src/gui/qgsmapcanvas.cpp
++++ b/src/gui/qgsmapcanvas.cpp
+@@ -418,6 +418,7 @@ void QgsMapCanvas::setLayerSet( QList<Qg
+       if ( !currentLayer )
+         continue;
+       disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
++      disconnect( currentLayer, SIGNAL( layerCrsChanged() ), this, SLOT( layerCrsChange() ) );
+       QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
+       if ( isVectLyr )
+       {
+@@ -433,6 +434,7 @@ void QgsMapCanvas::setLayerSet( QList<Qg
+       // Ticket #811 - racicot
+       QgsMapLayer *currentLayer = layer( i );
+       connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
++      connect( currentLayer, SIGNAL( layerCrsChanged() ), this, SLOT( layerCrsChange() ) );
+       QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
+       if ( isVectLyr )
+       {
+@@ -1579,6 +1581,15 @@ void QgsMapCanvas::layerStateChange()
+ 
+ } // layerStateChange
+ 
++void QgsMapCanvas::layerCrsChange()
++{
++  // called when a layer's CRS has been changed
++  QObject *theSender = sender();
++  QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( theSender );
++  QString destAuthId = mSettings.destinationCrs().authid();
++  getDatumTransformInfo( layer, layer->crs().authid(), destAuthId );
++
++} // layerCrsChange
+ 
+ 
+ void QgsMapCanvas::freeze( bool frz )
+--- a/src/gui/qgsmapcanvas.h
++++ b/src/gui/qgsmapcanvas.h
+@@ -409,6 +409,9 @@ class GUI_EXPORT QgsMapCanvas : public Q
+ 
+     //! This slot is connected to the visibility change of one or more layers
+     void layerStateChange();
++    
++    //! This slot is connected to the layer's CRS change
++    void layerCrsChange();
+ 
+     //! Whether to suppress rendering or not
+     void setRenderFlag( bool theFlag );
diff --git a/debian/patches/0001-Backport-of-dangling-pointer-bug.patch b/debian/patches/0001-Backport-of-dangling-pointer-bug.patch
new file mode 100644
index 0000000..c741aed
--- /dev/null
+++ b/debian/patches/0001-Backport-of-dangling-pointer-bug.patch
@@ -0,0 +1,29 @@
+From 6566ae31d085ce32692494d2d5ae2da4f47f1463 Mon Sep 17 00:00:00 2001
+From: Chris Crook <ccrook at linz.govt.nz>
+Date: Sun, 22 Mar 2015 16:06:31 +1300
+Subject: Backport of dangling pointer bug
+Origin: https://github.com/qgis/QGIS/commit/6566ae31d085ce32692494d2d5ae2da4f47f1463
+
+---
+ src/providers/delimitedtext/qgsdelimitedtextfeatureiterator.cpp |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/src/providers/delimitedtext/qgsdelimitedtextfeatureiterator.cpp
++++ b/src/providers/delimitedtext/qgsdelimitedtextfeatureiterator.cpp
+@@ -447,7 +447,7 @@ void QgsDelimitedTextFeatureIterator::fe
+ 
+ QgsDelimitedTextFeatureSource::QgsDelimitedTextFeatureSource( const QgsDelimitedTextProvider* p )
+     : mGeomRep( p->mGeomRep )
+-    , mSubsetExpression( p->mSubsetExpression )
++    , mSubsetExpression( p->mSubsetExpression ? new QgsExpression(p->mSubsetExpression->expression()) : 0 )
+     , mExtent( p->mExtent )
+     , mUseSpatialIndex( p->mUseSpatialIndex )
+     , mSpatialIndex( p->mSpatialIndex ? new QgsSpatialIndex( *p->mSpatialIndex ) : 0 )
+@@ -472,6 +472,7 @@ QgsDelimitedTextFeatureSource::QgsDelimi
+ 
+ QgsDelimitedTextFeatureSource::~QgsDelimitedTextFeatureSource()
+ {
++  delete mSubsetExpression;
+   delete mSpatialIndex;
+   delete mFile;
+ }
diff --git a/debian/patches/0001-Backport-of-missing-type-definitions-in-delimited-te.patch b/debian/patches/0001-Backport-of-missing-type-definitions-in-delimited-te.patch
new file mode 100644
index 0000000..8e6f492
--- /dev/null
+++ b/debian/patches/0001-Backport-of-missing-type-definitions-in-delimited-te.patch
@@ -0,0 +1,27 @@
+From 81f9c731f04240a730e41f0593897b55bf317e79 Mon Sep 17 00:00:00 2001
+From: Chris Crook <ccrook at linz.govt.nz>
+Date: Sun, 22 Mar 2015 16:52:59 +1300
+Subject: Backport of missing type definitions in delimited text provider
+Origin: https://github.com/qgis/QGIS/commit/81f9c731f04240a730e41f0593897b55bf317e79
+
+---
+ src/providers/delimitedtext/qgsdelimitedtextprovider.cpp |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
++++ b/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
+@@ -84,7 +84,13 @@ QgsDelimitedTextProvider::QgsDelimitedTe
+     , mBuildSpatialIndex( false )
+     , mSpatialIndex( 0 )
+ {
+-  QgsDebugMsg( "Delimited text file uri is " + uri );
++  mNativeTypes
++  << QgsVectorDataProvider::NativeType( tr( "Whole number (integer)" ), "integer", QVariant::Int, 0, 10 )
++  << QgsVectorDataProvider::NativeType( tr( "Decimal number (double)" ), "double precision", QVariant::Double, -1, -1, -1, -1 )
++  << QgsVectorDataProvider::NativeType( tr( "Text, unlimited length (text)" ), "text", QVariant::String, -1, -1, -1, -1 )
++  ;
++
++ QgsDebugMsg( "Delimited text file uri is " + uri );
+ 
+   QUrl url = QUrl::fromEncoded( uri.toAscii() );
+   mFile = new QgsDelimitedTextFile();
diff --git a/debian/patches/0001-Backport-of-pull-request-1932.patch b/debian/patches/0001-Backport-of-pull-request-1932.patch
new file mode 100644
index 0000000..6096c70
--- /dev/null
+++ b/debian/patches/0001-Backport-of-pull-request-1932.patch
@@ -0,0 +1,25 @@
+From c7b28dbd3b194c4a0db44b4f98d8b24d466b5a85 Mon Sep 17 00:00:00 2001
+From: Chris Crook <ccrook at linz.govt.nz>
+Date: Mon, 30 Mar 2015 14:34:19 +1300
+Subject: Backport of pull request #1932
+Origin: https://github.com/qgis/QGIS/commit/c7b28dbd3b194c4a0db44b4f98d8b24d466b5a85
+
+---
+ src/app/qgsfieldcalculator.cpp |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/src/app/qgsfieldcalculator.cpp
++++ b/src/app/qgsfieldcalculator.cpp
+@@ -158,7 +158,11 @@ void QgsFieldCalculator::accept()
+     return;
+   }
+ 
+-  if ( mNewFieldGroupBox->isChecked() && mCreateVirtualFieldCheckbox->isChecked() )
++  // Test for creating expression field based on ! mUpdateExistingGroupBox checked rather
++  // than on mNewFieldGroupBox checked, as if the provider does not support adding attributes
++  // then mUpdateExistingGroupBox is set to not checkable, and hence is not checked.  This
++  // is a minimum fix to resolve this - better would be some GUI redesign...
++  if ( ! mUpdateExistingGroupBox->isChecked() && mCreateVirtualFieldCheckbox->isChecked() )
+   {
+     mVectorLayer->addExpressionField( calcString, fieldDefinition() );
+   }
diff --git a/debian/patches/0001-Better-default-for-COMPRESSTYPE-in-GDAL.patch b/debian/patches/0001-Better-default-for-COMPRESSTYPE-in-GDAL.patch
new file mode 100644
index 0000000..82da78c
--- /dev/null
+++ b/debian/patches/0001-Better-default-for-COMPRESSTYPE-in-GDAL.patch
@@ -0,0 +1,45 @@
+From 8b91b9efed61621c7b21000be4d1bd0383d782d6 Mon Sep 17 00:00:00 2001
+From: pcav <cavallini at faunalia.it>
+Date: Thu, 16 Apr 2015 17:59:39 +0200
+Subject: Better default for COMPRESSTYPE in GDAL
+Origin: https://github.com/qgis/QGIS/commit/8b91b9efed61621c7b21000be4d1bd0383d782d6
+
+---
+ python/plugins/processing/algs/gdal/rasterize.py |    2 +-
+ python/plugins/processing/algs/gdal/translate.py |    2 +-
+ python/plugins/processing/algs/gdal/warp.py      |    2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/python/plugins/processing/algs/gdal/rasterize.py
++++ b/python/plugins/processing/algs/gdal/rasterize.py
+@@ -83,7 +83,7 @@ class rasterize(OgrAlgorithm):
+             self.tr("Nodata value"),
+             '-9999'))
+         self.addParameter(ParameterSelection(self.COMPRESS,
+-            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 5))
++            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 4))
+         self.addParameter(ParameterNumber(self.JPEGCOMPRESSION,
+             self.tr('Set the JPEG compression level'),
+             1, 100, 75))
+--- a/python/plugins/processing/algs/gdal/translate.py
++++ b/python/plugins/processing/algs/gdal/translate.py
+@@ -90,7 +90,7 @@ class translate(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+         self.addParameter(ParameterSelection(self.COMPRESS,
+-            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 5))
++            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 4))
+         self.addParameter(ParameterNumber(self.JPEGCOMPRESSION,
+             self.tr('Set the JPEG compression level'),
+             1, 100, 75))
+--- a/python/plugins/processing/algs/gdal/warp.py
++++ b/python/plugins/processing/algs/gdal/warp.py
+@@ -78,7 +78,7 @@ class warp(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+         self.addParameter(ParameterSelection(self.COMPRESS,
+-            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 5))
++            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 4))
+         self.addParameter(ParameterNumber(self.JPEGCOMPRESSION,
+             self.tr('Set the JPEG compression level'),
+             1, 100, 75))
diff --git a/debian/patches/0001-Better-default-for-a-Processing-SAGA-module.patch b/debian/patches/0001-Better-default-for-a-Processing-SAGA-module.patch
new file mode 100644
index 0000000..8ed3bcd
--- /dev/null
+++ b/debian/patches/0001-Better-default-for-a-Processing-SAGA-module.patch
@@ -0,0 +1,22 @@
+From 4cf7b4f233226affafe79e6c4d760bde20344010 Mon Sep 17 00:00:00 2001
+From: pcav <cavallini at faunalia.it>
+Date: Fri, 10 Apr 2015 06:54:29 +0200
+Subject: Better default for a Processing:SAGA module
+Origin: https://github.com/qgis/QGIS/commit/4cf7b4f233226affafe79e6c4d760bde20344010
+
+---
+ .../algs/saga/description/2.1.3/VectorisingGridClasses.txt         |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/VectorisingGridClasses.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/VectorisingGridClasses.txt
+@@ -1,7 +1,7 @@
+ Vectorising Grid Classes
+ shapes_grid
+ ParameterRaster|GRID|Grid|False
+-ParameterSelection|CLASS_ALL|Class Selection|[0] one single class specified by class identifier;[1] all classes
++ParameterSelection|CLASS_ALL|Class Selection|[0] one single class specified by class identifier;[1] all classes|1
+ ParameterNumber|CLASS_ID|Class Identifier|None|None|0
+-ParameterSelection|SPLIT|Vectorised class as...|[0] one single (multi-)polygon object;[1] each island as separated polygon
++ParameterSelection|SPLIT|Vectorised class as...|[0] one single (multi-)polygon object;[1] each island as separated polygon|1
+ OutputVector|POLYGONS|Polygons
diff --git a/debian/patches/0001-Better-naming-for-GDAL-outputs-partial-fix-for-http-.patch b/debian/patches/0001-Better-naming-for-GDAL-outputs-partial-fix-for-http-.patch
new file mode 100644
index 0000000..3d1556b
--- /dev/null
+++ b/debian/patches/0001-Better-naming-for-GDAL-outputs-partial-fix-for-http-.patch
@@ -0,0 +1,278 @@
+From 94d5795f0503b626e19bd91faa106407eaed8dd9 Mon Sep 17 00:00:00 2001
+From: pcav <cavallini at faunalia.it>
+Date: Fri, 10 Apr 2015 09:44:20 +0200
+Subject: Better naming for GDAL outputs (partial fix for
+ http://hub.qgis.org/issues/12542)
+Bug: http://hub.qgis.org/issues/12542
+Origin: https://github.com/qgis/QGIS/commit/94d5795f0503b626e19bd91faa106407eaed8dd9
+
+Conflicts:
+	python/plugins/processing/algs/gdal/gdalcalc.py
+	python/plugins/processing/algs/gdal/gdaltindex.py
+---
+ python/plugins/processing/algs/gdal/ClipByExtent.py    |    2 +-
+ python/plugins/processing/algs/gdal/ColorRelief.py     |    2 +-
+ python/plugins/processing/algs/gdal/GridAverage.py     |    2 +-
+ python/plugins/processing/algs/gdal/GridDataMetrics.py |    2 +-
+ python/plugins/processing/algs/gdal/GridInvDist.py     |    2 +-
+ python/plugins/processing/algs/gdal/GridNearest.py     |    2 +-
+ python/plugins/processing/algs/gdal/aspect.py          |    2 +-
+ python/plugins/processing/algs/gdal/buildvrt.py        |    2 +-
+ python/plugins/processing/algs/gdal/fillnodata.py      |    2 +-
+ python/plugins/processing/algs/gdal/gdal2xyz.py        |    2 +-
+ python/plugins/processing/algs/gdal/gdaladdo.py        |    2 +-
+ python/plugins/processing/algs/gdal/hillshade.py       |    2 +-
+ python/plugins/processing/algs/gdal/merge.py           |    2 +-
+ python/plugins/processing/algs/gdal/nearblack.py       |    2 +-
+ python/plugins/processing/algs/gdal/pct2rgb.py         |    2 +-
+ python/plugins/processing/algs/gdal/polygonize.py      |    2 +-
+ python/plugins/processing/algs/gdal/proximity.py       |    2 +-
+ python/plugins/processing/algs/gdal/rgb2pct.py         |    2 +-
+ python/plugins/processing/algs/gdal/roughness.py       |    2 +-
+ python/plugins/processing/algs/gdal/sieve.py           |    2 +-
+ python/plugins/processing/algs/gdal/slope.py           |    2 +-
+ python/plugins/processing/algs/gdal/tpi.py             |    2 +-
+ 22 files changed, 22 insertions(+), 22 deletions(-)
+
+--- a/python/plugins/processing/algs/gdal/ClipByExtent.py
++++ b/python/plugins/processing/algs/gdal/ClipByExtent.py
+@@ -54,7 +54,7 @@ class ClipByExtent(GdalAlgorithm):
+         self.addParameter(ParameterExtent(self.PROJWIN, self.tr('Clipping extent')))
+         self.addParameter(ParameterString(self.EXTRA,
+             self.tr('Additional creation parameters'), '', optional=True))
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Clipped')))
+ 
+     def processAlgorithm(self, progress):
+         out = self.getOutputValue(self.OUTPUT)
+--- a/python/plugins/processing/algs/gdal/ColorRelief.py
++++ b/python/plugins/processing/algs/gdal/ColorRelief.py
+@@ -63,7 +63,7 @@ class ColorRelief(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.MATCH_MODE,
+             self.tr('Matching mode'), self.MATCHING_MODES, 0))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Color relief')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['color-relief']
+--- a/python/plugins/processing/algs/gdal/GridAverage.py
++++ b/python/plugins/processing/algs/gdal/GridAverage.py
+@@ -74,7 +74,7 @@ class GridAverage(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Average')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['-l']
+--- a/python/plugins/processing/algs/gdal/GridDataMetrics.py
++++ b/python/plugins/processing/algs/gdal/GridDataMetrics.py
+@@ -80,7 +80,7 @@ class GridDataMetrics(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Interpolated metrics')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['-l']
+--- a/python/plugins/processing/algs/gdal/GridInvDist.py
++++ b/python/plugins/processing/algs/gdal/GridInvDist.py
+@@ -84,7 +84,7 @@ class GridInvDist(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Interpolated IDW')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['-l']
+--- a/python/plugins/processing/algs/gdal/GridNearest.py
++++ b/python/plugins/processing/algs/gdal/GridNearest.py
+@@ -72,7 +72,7 @@ class GridNearest(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Interpolated nearest neighbor')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['-l']
+--- a/python/plugins/processing/algs/gdal/aspect.py
++++ b/python/plugins/processing/algs/gdal/aspect.py
+@@ -64,7 +64,7 @@ class aspect(GdalAlgorithm):
+         self.addParameter(ParameterBoolean(self.ZERO_FLAT,
+             self.tr('Return 0 for flat (instead of -9999)'), False))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, 'Output file'))
++        self.addOutput(OutputRaster(self.OUTPUT, 'Aspect'))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['aspect']
+--- a/python/plugins/processing/algs/gdal/buildvrt.py
++++ b/python/plugins/processing/algs/gdal/buildvrt.py
+@@ -57,7 +57,7 @@ class buildvrt(GdalAlgorithm):
+             self.tr('Layer stack'), True))
+         self.addParameter(ParameterBoolean(self.PROJ_DIFFERENCE,
+             self.tr('Allow projection difference'), False))
+-        self.addOutput(OutputRaster(buildvrt.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(buildvrt.OUTPUT, self.tr('Virtual')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/fillnodata.py
++++ b/python/plugins/processing/algs/gdal/fillnodata.py
+@@ -64,7 +64,7 @@ class fillnodata(GdalAlgorithm):
+         self.addParameter(ParameterBoolean(self.NO_DEFAULT_MASK,
+             self.tr('Do not use default validity mask'), False))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Filled')))
+ 
+     def processAlgorithm(self, progress):
+         output = self.getOutputValue(self.OUTPUT)
+--- a/python/plugins/processing/algs/gdal/gdal2xyz.py
++++ b/python/plugins/processing/algs/gdal/gdal2xyz.py
+@@ -50,7 +50,7 @@ class gdal2xyz(GdalAlgorithm):
+         self.addParameter(ParameterNumber(self.BAND,
+             self.tr('Band number'), 1, 9999, 1))
+ 
+-        self.addOutput(OutputTable(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputTable(self.OUTPUT, self.tr('xyz')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/gdaladdo.py
++++ b/python/plugins/processing/algs/gdal/gdaladdo.py
+@@ -73,7 +73,7 @@ class gdaladdo(GdalAlgorithm):
+             self.tr('Resampling method'), self.METHODS, 0))
+         self.addParameter(ParameterSelection(self.FORMAT,
+             self.tr('Overview format'), self.FORMATS, 0))
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer'), True))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Pyramidized'), True))
+ 
+     def processAlgorithm(self, progress):
+         inFile = self.getParameterValue(self.INPUT)
+--- a/python/plugins/processing/algs/gdal/hillshade.py
++++ b/python/plugins/processing/algs/gdal/hillshade.py
+@@ -68,7 +68,7 @@ class hillshade(GdalAlgorithm):
+         self.addParameter(ParameterNumber(self.ALTITUDE,
+             self.tr('Altitude of the light'), 0.0, 99999999.999999, 45.0))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Hillshade')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['hillshade']
+--- a/python/plugins/processing/algs/gdal/merge.py
++++ b/python/plugins/processing/algs/gdal/merge.py
+@@ -57,7 +57,7 @@ class merge(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+ 
+-        self.addOutput(OutputRaster(merge.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(merge.OUTPUT, self.tr('Merged')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/nearblack.py
++++ b/python/plugins/processing/algs/gdal/nearblack.py
+@@ -50,7 +50,7 @@ class nearblack(GdalAlgorithm):
+         self.addParameter(ParameterBoolean(nearblack.WHITE,
+             self.tr('Search for nearly white pixels instead of nearly black'),
+             False))
+-        self.addOutput(OutputRaster(nearblack.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(nearblack.OUTPUT, self.tr('Nearblack')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/pct2rgb.py
++++ b/python/plugins/processing/algs/gdal/pct2rgb.py
+@@ -50,7 +50,7 @@ class pct2rgb(GdalAlgorithm):
+             options.append(str(i + 1))
+         self.addParameter(ParameterSelection(pct2rgb.NBAND,
+             self.tr('Band to convert'), options))
+-        self.addOutput(OutputRaster(pct2rgb.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(pct2rgb.OUTPUT, self.tr('PCT to RGB')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/polygonize.py
++++ b/python/plugins/processing/algs/gdal/polygonize.py
+@@ -50,7 +50,7 @@ class polygonize(GdalAlgorithm):
+             self.tr('Input layer'), False))
+         self.addParameter(ParameterString(polygonize.FIELD,
+             self.tr('Output field name'), 'DN'))
+-        self.addOutput(OutputVector(polygonize.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputVector(polygonize.OUTPUT, self.tr('Vectorized')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/proximity.py
++++ b/python/plugins/processing/algs/gdal/proximity.py
+@@ -71,7 +71,7 @@ class proximity(GdalAlgorithm):
+             -1, 9999, -1))
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Distance')))
+ 
+     def processAlgorithm(self, progress):
+         output = self.getOutputValue(self.OUTPUT)
+--- a/python/plugins/processing/algs/gdal/rgb2pct.py
++++ b/python/plugins/processing/algs/gdal/rgb2pct.py
+@@ -48,7 +48,7 @@ class rgb2pct(GdalAlgorithm):
+             self.tr('Input layer'), False))
+         self.addParameter(ParameterNumber(rgb2pct.NCOLORS,
+             self.tr('Number of colors'), 1, None, 2))
+-        self.addOutput(OutputRaster(rgb2pct.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(rgb2pct.OUTPUT, self.tr('RGB to PCT')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = []
+--- a/python/plugins/processing/algs/gdal/roughness.py
++++ b/python/plugins/processing/algs/gdal/roughness.py
+@@ -50,7 +50,7 @@ class roughness(GdalAlgorithm):
+         self.addParameter(ParameterBoolean(self.COMPUTE_EDGES,
+             self.tr('Compute edges'), False))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Roughness')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['roughness']
+--- a/python/plugins/processing/algs/gdal/sieve.py
++++ b/python/plugins/processing/algs/gdal/sieve.py
+@@ -56,7 +56,7 @@ class sieve(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.CONNECTIONS,
+             self.tr('Pixel connection'), self.PIXEL_CONNECTIONS, 0))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Sieved')))
+ 
+     def processAlgorithm(self, progress):
+         output = self.getOutputValue(self.OUTPUT)
+--- a/python/plugins/processing/algs/gdal/slope.py
++++ b/python/plugins/processing/algs/gdal/slope.py
+@@ -61,7 +61,7 @@ class slope(GdalAlgorithm):
+             self.tr('Scale (ratio of vert. units to horiz.)'),
+             0.0, 99999999.999999, 1.0))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Slope')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['slope']
+--- a/python/plugins/processing/algs/gdal/tpi.py
++++ b/python/plugins/processing/algs/gdal/tpi.py
+@@ -50,7 +50,7 @@ class tpi(GdalAlgorithm):
+         self.addParameter(ParameterBoolean(self.COMPUTE_EDGES,
+             self.tr('Compute edges'), False))
+ 
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output file')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Topographic Position Index')))
+ 
+     def processAlgorithm(self, progress):
+         arguments = ['TPI']
diff --git a/debian/patches/0001-Better-output-names-for-SAGA-models.patch b/debian/patches/0001-Better-output-names-for-SAGA-models.patch
new file mode 100644
index 0000000..4946c7d
--- /dev/null
+++ b/debian/patches/0001-Better-output-names-for-SAGA-models.patch
@@ -0,0 +1,141 @@
+From 466fe70cbbadfb43c851b9b8f0227a13afc6b97f Mon Sep 17 00:00:00 2001
+From: pcav <cavallini at faunalia.it>
+Date: Fri, 10 Apr 2015 11:04:27 +0200
+Subject: Better output names for SAGA models
+Origin: https://github.com/qgis/QGIS/commit/466fe70cbbadfb43c851b9b8f0227a13afc6b97f
+
+---
+ .../algs/saga/description/2.1.3/AddCoordinatestopoints.txt           |    2 +-
+ python/plugins/processing/algs/saga/description/2.1.3/CropToData.txt |    2 +-
+ .../processing/algs/saga/description/2.1.3/GridCalculator.txt        |    2 +-
+ .../processing/algs/saga/description/2.1.3/NaturalNeighbour.txt      |    2 +-
+ .../processing/algs/saga/description/2.1.3/NearestNeighbour.txt      |    2 +-
+ .../algs/saga/description/2.1.3/OrdinaryKriging(Global).txt          |    2 +-
+ .../processing/algs/saga/description/2.1.3/OrdinaryKriging.txt       |    2 +-
+ .../processing/algs/saga/description/2.1.3/PolynomialRegression.txt  |    2 +-
+ python/plugins/processing/algs/saga/description/2.1.3/Resampling.txt |    2 +-
+ .../algs/saga/description/2.1.3/Separatepointsbydirection.txt        |    2 +-
+ .../processing/algs/saga/description/2.1.3/TransformShapes.txt       |    2 +-
+ .../plugins/processing/algs/saga/description/2.1.3/Triangulation.txt |    2 +-
+ .../algs/saga/description/2.1.3/UniversalKriging(Global).txt         |    2 +-
+ .../processing/algs/saga/description/2.1.3/UniversalKriging.txt      |    2 +-
+ 14 files changed, 14 insertions(+), 14 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/AddCoordinatestopoints.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/AddCoordinatestopoints.txt
+@@ -1,4 +1,4 @@
+ Add Coordinates to points
+ shapes_points
+ ParameterVector|INPUT|Points|0|False
+-OutputVector|OUTPUT|Output
++OutputVector|OUTPUT|Points with coordinates
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CropToData.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CropToData.txt
+@@ -1,4 +1,4 @@
+ Crop to Data
+ grid_tools
+ ParameterRaster|INPUT|Input layer|False
+-OutputRaster|OUTPUT|Cropped layer
+\ No newline at end of file
++OutputRaster|OUTPUT|Cropped
+--- a/python/plugins/processing/algs/saga/description/2.1.3/GridCalculator.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/GridCalculator.txt
+@@ -6,4 +6,4 @@ ParameterMultipleInput|XGRIDS|Additional
+ ParameterString|FORMULA|Formula|
+ ParameterBoolean|USE_NODATA|Use NoData|False
+ ParameterSelection|TYPE|Output Data Type|[0] bit;[1] unsigned 1 byte integer;[2] signed 1 byte integer;[3] unsigned 2 byte integer;[4] signed 2 byte integer;[5] unsigned 4 byte integer;[6] signed 4 byte integer;[7] 4 byte floating point number;[8] 8 byte floating point number|7
+-OutputRaster|RESULT|Result layer
+\ No newline at end of file
++OutputRaster|RESULT|Calculated
+--- a/python/plugins/processing/algs/saga/description/2.1.3/NaturalNeighbour.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/NaturalNeighbour.txt
+@@ -6,4 +6,4 @@ Hardcoded|-TARGET_DEFINITION 0
+ ParameterBoolean|SIBSON         |Sibson|True
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
++OutputRaster|USER_GRID|Natural neighbour
+--- a/python/plugins/processing/algs/saga/description/2.1.3/NearestNeighbour.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/NearestNeighbour.txt
+@@ -5,4 +5,4 @@ ParameterTableField|FIELD|Attribute|SHAP
+ Hardcoded|-TARGET_DEFINITION 0
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
++OutputRaster|USER_GRID|Nearest neighbour
+--- a/python/plugins/processing/algs/saga/description/2.1.3/OrdinaryKriging(Global).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/OrdinaryKriging(Global).txt
+@@ -18,5 +18,5 @@ ParameterNumber|POW_B|Power Function - B
+ ParameterNumber|USER_CELL_SIZE|Grid Size|0|None|1.0
+ ParameterBoolean|USER_FIT_EXTENT        |Fit Extent|True
+ Extent USER_X_EXTENT_MIN USER_X_EXTENT_MAX USER_Y_EXTENT_MIN USER_Y_EXTENT_MIN
+-OutputRaster|GRID|Grid
++OutputRaster|GRID|Ordinary kriging global
+ OutputRaster|VARIANCE|Variance
+--- a/python/plugins/processing/algs/saga/description/2.1.3/OrdinaryKriging.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/OrdinaryKriging.txt
+@@ -21,5 +21,5 @@ ParameterBoolean|USER_BVARIANCE
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|USER_SIZE|Cellsize|0|None|1.0
+ ParameterSelection|USER_FIT|Search Direction|[0] nodes;[1] cells
+-OutputRaster|USER_GRID|Grid
++OutputRaster|USER_GRID|Ordinary kriging
+ OutputRaster|USER_VARIANCE|Variance
+--- a/python/plugins/processing/algs/saga/description/2.1.3/PolynomialRegression.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/PolynomialRegression.txt
+@@ -10,4 +10,4 @@ ParameterSelection|TARGET|Trend Surface|
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+ OutputVector|RESIDUALS|Residuals
+-OutputRaster|USER_GRID|Grid
++OutputRaster|USER_GRID|Regression
+--- a/python/plugins/processing/algs/saga/description/2.1.3/Resampling.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/Resampling.txt
+@@ -7,4 +7,4 @@ ParameterSelection|SCALE_UP_METHOD|Inter
+ ParameterSelection|SCALE_DOWN_METHOD|Interpolation Method (Scale Down)|[0] Nearest Neighbor;[1] Bilinear Interpolation;[2] Inverse Distance Interpolation;[3] Bicubic Spline Interpolation;[4] B-Spline Interpolation
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
++OutputRaster|USER_GRID|Resampled
+--- a/python/plugins/processing/algs/saga/description/2.1.3/Separatepointsbydirection.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/Separatepointsbydirection.txt
+@@ -3,4 +3,4 @@ shapes_points
+ ParameterVector|POINTS|Points|0|False
+ ParameterNumber|DIRECTIONS|Number of Directions|1.0|None|4
+ ParameterNumber|TOLERANCE|Tolerance (Degree)|0.0|None|5
+-OutputVector|OUTPUT|Ouput
++OutputVector|OUTPUT|Point direction
+--- a/python/plugins/processing/algs/saga/description/2.1.3/TransformShapes.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/TransformShapes.txt
+@@ -8,4 +8,4 @@ ParameterNumber|SCALEX|Scale Factor X|No
+ ParameterNumber|SCALEY|Scale Factor Y|None|None|1.0
+ ParameterNumber|ANCHORX|X|None|None|0.0
+ ParameterNumber|ANCHORY|Y|None|None|0.0
+-OutputVector|OUT|Output
++OutputVector|OUT|Transformed
+--- a/python/plugins/processing/algs/saga/description/2.1.3/Triangulation.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/Triangulation.txt
+@@ -5,4 +5,4 @@ ParameterTableField|FIELD|Attribute|SHAP
+ Hardcoded|-TARGET_DEFINITION 0
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
++OutputRaster|USER_GRID|Triangulated
+--- a/python/plugins/processing/algs/saga/description/2.1.3/UniversalKriging(Global).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/UniversalKriging(Global).txt
+@@ -20,5 +20,5 @@ ParameterSelection|INTERPOL|Grid Interpo
+ ParameterNumber|USER_CELL_SIZE|Grid Size|0|None|1.0
+ ParameterBoolean|USER_FIT_EXTENT        |Fit Extent|True
+ Extent USER_X_EXTENT_MIN USER_X_EXTENT_MAX USER_Y_EXTENT_MIN USER_Y_EXTENT_MIN
+-OutputRaster|GRID|Grid
++OutputRaster|GRID|Universal kriging global
+ OutputRaster|VARIANCE|Variance
+--- a/python/plugins/processing/algs/saga/description/2.1.3/UniversalKriging.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/UniversalKriging.txt
+@@ -22,5 +22,5 @@ ParameterNumber|NPOINTS_MAX|Max. Number
+ ParameterNumber|MAXRADIUS|Maximum Search Radius (map units)|None|None|1000.0
+ ParameterNumber|USER_CELL_SIZE|Grid Size|0|None|1.0
+ Extent USER_X_EXTENT_MIN USER_X_EXTENT_MAX USER_Y_EXTENT_MIN USER_Y_EXTENT_MIN
+-OutputRaster|GRID|Grid
++OutputRaster|GRID|Universal kriging
+ OutputRaster|VARIANCE|Variance
diff --git a/debian/patches/0001-Close-attribute-dialog-when-layer-is-removed.patch b/debian/patches/0001-Close-attribute-dialog-when-layer-is-removed.patch
new file mode 100644
index 0000000..62968d6
--- /dev/null
+++ b/debian/patches/0001-Close-attribute-dialog-when-layer-is-removed.patch
@@ -0,0 +1,22 @@
+From 0134a97b9840864f81fa52e62d3f17bc85cd1ed1 Mon Sep 17 00:00:00 2001
+From: Matthias Kuhn <matthias.kuhn at gmx.ch>
+Date: Wed, 18 Mar 2015 18:39:57 +0100
+Subject: Close attribute dialog when layer is removed
+Bug: http://hub.qgis.org/issues/12336
+Origin: https://github.com/qgis/QGIS/commit/0134a97b9840864f81fa52e62d3f17bc85cd1ed1
+
+Fix #12336
+---
+ src/gui/qgsattributedialog.cpp |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/src/gui/qgsattributedialog.cpp
++++ b/src/gui/qgsattributedialog.cpp
+@@ -108,6 +108,7 @@ void QgsAttributeDialog::init( QgsVector
+   QDialogButtonBox* buttonBox = mAttributeForm->findChild<QDialogButtonBox*>();
+   connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
+   connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
++  connect( layer, SIGNAL( layerDeleted() ), this, SLOT( close() ) );
+ 
+   QgsActionMenu* menu = new QgsActionMenu( layer, &mAttributeForm->feature(), this );
+   if ( menu->actions().size() > 0 )
diff --git a/debian/patches/0001-Custom-widgets-make-sure-config-can-loaded-from-the-.patch b/debian/patches/0001-Custom-widgets-make-sure-config-can-loaded-from-the-.patch
new file mode 100644
index 0000000..fff6f79
--- /dev/null
+++ b/debian/patches/0001-Custom-widgets-make-sure-config-can-loaded-from-the-.patch
@@ -0,0 +1,48 @@
+From e41fd5445383751d004519c9766776437c0a6dfe Mon Sep 17 00:00:00 2001
+From: Matthias Kuhn <matthias.kuhn at gmx.ch>
+Date: Wed, 18 Mar 2015 09:35:04 +0100
+Subject: Custom widgets: make sure config can loaded from the project
+Origin: https://github.com/qgis/QGIS/commit/e41fd5445383751d004519c9766776437c0a6dfe
+
+Apparently sip cannot handle private virtual methods
+---
+ python/gui/editorwidgets/core/qgseditorwidgetfactory.sip |    2 +-
+ src/gui/editorwidgets/core/qgseditorwidgetfactory.h      |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/python/gui/editorwidgets/core/qgseditorwidgetfactory.sip
++++ b/python/gui/editorwidgets/core/qgseditorwidgetfactory.sip
+@@ -122,7 +122,6 @@ class QgsEditorWidgetFactory
+      */
+     virtual QVariant createCache( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config );
+ 
+-  private:
+     /**
+      * Read the config from an XML file and map it to a proper {@link QgsEditorWidgetConfig}.
+      *
+@@ -134,6 +133,7 @@ class QgsEditorWidgetFactory
+      */
+     virtual QgsEditorWidgetConfig readConfig( const QDomElement& configElement, QgsVectorLayer* layer, int fieldIdx );
+ 
++  private:
+     /**
+      * This method allows disabling this editor widget type for a certain field.
+      * By default, it returns true for all fields.
+--- a/src/gui/editorwidgets/core/qgseditorwidgetfactory.h
++++ b/src/gui/editorwidgets/core/qgseditorwidgetfactory.h
+@@ -136,7 +136,6 @@ class GUI_EXPORT QgsEditorWidgetFactory
+      */
+     virtual QVariant createCache( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config );
+ 
+-  private:
+     /**
+      * Read the config from an XML file and map it to a proper {@link QgsEditorWidgetConfig}.
+      *
+@@ -148,6 +147,7 @@ class GUI_EXPORT QgsEditorWidgetFactory
+      */
+     virtual QgsEditorWidgetConfig readConfig( const QDomElement& configElement, QgsVectorLayer* layer, int fieldIdx );
+ 
++  private:
+     /**
+      * This method allows disabling this editor widget type for a certain field.
+      * By default, it returns true for all fields.
diff --git a/debian/patches/0001-Don-t-keep-dangling-pointers-in-QgisApp-mPrintCompos.patch b/debian/patches/0001-Don-t-keep-dangling-pointers-in-QgisApp-mPrintCompos.patch
new file mode 100644
index 0000000..17c4fb7
--- /dev/null
+++ b/debian/patches/0001-Don-t-keep-dangling-pointers-in-QgisApp-mPrintCompos.patch
@@ -0,0 +1,31 @@
+From c2788690e1e482b8c138d9f371900188fb768225 Mon Sep 17 00:00:00 2001
+From: Sandro Mani <manisandro at gmail.com>
+Date: Tue, 3 Mar 2015 00:17:40 +0100
+Subject: Don't keep dangling pointers in QgisApp::mPrintComposers
+Origin: https://github.com/qgis/QGIS/commit/c2788690e1e482b8c138d9f371900188fb768225
+
+---
+ src/app/qgisapp.cpp |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/app/qgisapp.cpp
++++ b/src/app/qgisapp.cpp
+@@ -5654,7 +5654,7 @@ bool QgisApp::loadComposersFromProject(
+ void QgisApp::deletePrintComposers()
+ {
+   QSet<QgsComposer*>::iterator it = mPrintComposers.begin();
+-  for ( ; it != mPrintComposers.end(); ++it )
++  while ( it != mPrintComposers.end() )
+   {
+     emit composerWillBeRemoved(( *it )->view() );
+ 
+@@ -5670,8 +5670,8 @@ void QgisApp::deletePrintComposers()
+     {
+       delete composition;
+     }
++    it = mPrintComposers.erase( it );
+   }
+-  mPrintComposers.clear();
+   mLastComposerId = 0;
+   markDirty();
+ }
diff --git a/debian/patches/0001-Fix-QgsRubberBand-refresh.patch b/debian/patches/0001-Fix-QgsRubberBand-refresh.patch
new file mode 100644
index 0000000..90320c0
--- /dev/null
+++ b/debian/patches/0001-Fix-QgsRubberBand-refresh.patch
@@ -0,0 +1,137 @@
+From 37171dc0b780bae69989aced4544e51d11ceefba Mon Sep 17 00:00:00 2001
+From: Sandro Santilli <strk at keybit.net>
+Date: Wed, 1 Apr 2015 12:30:20 +0200
+Subject: Fix QgsRubberBand refresh
+Bug: http://hub.qgis.org/issues/12392
+Origin: https://github.com/qgis/QGIS/commit/37171dc0b780bae69989aced4544e51d11ceefba
+
+- Fixes invalid calculation of rubberband boundingRect
+- Scales icon and pen width with rubberband when computing rect
+- Recompute rubberband extent on zoom/pan
+
+Fix #12392
+Includes testcase
+
+(backport of master commits d43d8bf 84d47c9 a844bfa)
+---
+ src/gui/qgsrubberband.cpp           |   22 +++++++++++++---
+ tests/src/gui/testqgsrubberband.cpp |   48 +++++++++++++++++++++++++++++++++--
+ 2 files changed, 64 insertions(+), 6 deletions(-)
+
+--- a/src/gui/qgsrubberband.cpp
++++ b/src/gui/qgsrubberband.cpp
+@@ -535,7 +535,8 @@ void QgsRubberBand::updateRect()
+ 
+   const QgsMapToPixel& m2p = *( mMapCanvas->getCoordinateTransform() );
+ 
+-  qreal w = ( mIconSize - 1 ) / 2 + mPen.width();
++  qreal res = m2p.mapUnitsPerPixel();
++  qreal w = ( ( mIconSize - 1 ) / 2 + mPen.width() ) / res;
+ 
+   QgsRectangle r;
+   for ( int i = 0; i < mPoints.size(); ++i )
+@@ -547,14 +548,22 @@ void QgsRubberBand::updateRect()
+       QgsPoint p( it->x() + mTranslationOffsetX, it->y() + mTranslationOffsetY );
+       p = m2p.transform( p );
+       QgsRectangle rect( p.x() - w, p.y() - w, p.x() + w, p.y() + w );
+-      r.combineExtentWith( &rect );
++
++      if ( r.isEmpty() )
++      {
++        // Get rectangle of the first point
++        r = rect;
++      }
++      else
++      {
++        r.combineExtentWith( &rect );
++      }
+     }
+   }
+ 
+   // This is an hack to pass QgsMapCanvasItem::setRect what it
+   // expects (encoding of position and size of the item)
+   QgsPoint topLeft = m2p.toMapPoint( r.xMinimum(), r.yMinimum() );
+-  double res = m2p.mapUnitsPerPixel();
+   QgsRectangle rect( topLeft.x(), topLeft.y(), topLeft.x() + r.width()*res, topLeft.y() - r.height()*res );
+ 
+   setRect( rect );
+@@ -563,7 +572,12 @@ void QgsRubberBand::updateRect()
+ 
+ void QgsRubberBand::updatePosition( )
+ {
+-  // nothing to do here...
++  // re-compute rectangle
++  // See http://hub.qgis.org/issues/12392
++  // NOTE: could be optimized by saving map-extent
++  //       of rubberband and simply re-projecting
++  //       that to device-rectange on "updatePosition"
++  updateRect();
+ }
+ 
+ void QgsRubberBand::setTranslationOffset( double dx, double dy )
+--- a/tests/src/gui/testqgsrubberband.cpp
++++ b/tests/src/gui/testqgsrubberband.cpp
+@@ -45,6 +45,7 @@ class TestQgsRubberband : public QObject
+     void cleanup(); // will be called after every testfunction.
+ 
+     void testAddSingleMultiGeometries(); //test for #7728
++    void testBoundingRect(); //test for #12392
+ 
+   private:
+     QgsMapCanvas* mCanvas;
+@@ -107,10 +108,53 @@ void TestQgsRubberband::testAddSingleMul
+   QVERIFY( mRubberband->numberOfVertices() == 15 );
+ }
+ 
+-QTEST_MAIN( TestQgsRubberband )
+-#include "testqgsrubberband.moc"
+ 
++void TestQgsRubberband::testBoundingRect()
++{
++  QSizeF mapSize = mCanvas->mapSettings().outputSize();
+ 
++  // Set extent to match canvas size.
++  // This is to ensure a 1:1 scale
++  mCanvas->setExtent( QgsRectangle( QRectF(
++      QPointF(0,0), mapSize
++  ) ) );
++  QCOMPARE( mCanvas->mapUnitsPerPixel (), 1.0 );
++
++  // Polygon extent is 10,10 to 30,30
++  QSharedPointer<QgsGeometry> geom( QgsGeometry::fromWkt(
++      "POLYGON((10 10,10 30,30 30,30 10,10 10))"
++  ) );
++  mRubberband = new QgsRubberBand( mCanvas, mPolygonLayer->geometryType() );
++  mRubberband->setIconSize( 5 ); // default, but better be explicit
++  mRubberband->setWidth( 1 );    // default, but better be explicit
++  mRubberband->addGeometry( geom.data(), mPolygonLayer );
++
++  // 20 pixels for the extent + 3 for pen & icon per side + 2 of padding
++  QCOMPARE( mRubberband->boundingRect(), QRectF(QPointF(-1,-1),QSizeF(28,28)) );
++  QCOMPARE( mRubberband->pos(), QPointF(
++    // 10 for extent minx - 3 for pen & icon
++    7,
++    // 30 for extent maxy - 3 for pen & icon
++    mapSize.height() - 30 - 3
++  ) );
++
++  mCanvas->setExtent( QgsRectangle( QRectF(
++      QPointF(0,0), mapSize/2
++  ) ) );
++
++  // 40 pixels for the extent + 6 for pen & icon per side + 2 of padding
++  QCOMPARE( mRubberband->boundingRect(), QRectF(QPointF(-1,-1),QSizeF(54,54)) );
++  QCOMPARE( mRubberband->pos(), QPointF(
++    // 10 for extent minx - 3 for pen & icon
++    7 * 2,
++    // 30 for extent maxy - 3 for pen & icon
++    mapSize.height() - ( 30 + 3 ) * 2
++  ) );
+ 
++}
++
++
++QTEST_MAIN( TestQgsRubberband )
++#include "testqgsrubberband.moc"
+ 
+ 
diff --git a/debian/patches/0001-Fix-QgsRubberBand-visibility-behavior-followup-37171.patch b/debian/patches/0001-Fix-QgsRubberBand-visibility-behavior-followup-37171.patch
new file mode 100644
index 0000000..ac473b4
--- /dev/null
+++ b/debian/patches/0001-Fix-QgsRubberBand-visibility-behavior-followup-37171.patch
@@ -0,0 +1,100 @@
+From 7210c4a639caa4ca321144718d238ff114b74e47 Mon Sep 17 00:00:00 2001
+From: Anatoliy Golubev <darth.naihil at gmail.com>
+Date: Thu, 2 Apr 2015 14:47:57 +0300
+Subject: Fix QgsRubberBand visibility behavior (followup 37171dc0)
+Bug: http://hub.qgis.org/issues/12486
+Origin: https://github.com/qgis/QGIS/commit/7210c4a639caa4ca321144718d238ff114b74e47
+
+Visibility behavior stays the same as in QGIS 2.6
+Test included.
+
+Fix #12486
+Contributed via https://github.com/qgis/QGIS/pull/1972
+---
+ src/gui/qgsrubberband.cpp           |    3 ++-
+ tests/src/gui/testqgsrubberband.cpp |   41 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 43 insertions(+), 1 deletion(-)
+
+--- a/src/gui/qgsrubberband.cpp
++++ b/src/gui/qgsrubberband.cpp
+@@ -182,6 +182,7 @@ void QgsRubberBand::addPoint( const QgsP
+ 
+   if ( doUpdate )
+   {
++    setVisible( true );
+     updateRect();
+     update();
+   }
+@@ -418,6 +419,7 @@ void QgsRubberBand::addGeometry( QgsGeom
+       return;
+   }
+ 
++  setVisible( true );
+   updateRect();
+   update();
+ }
+@@ -567,7 +569,6 @@ void QgsRubberBand::updateRect()
+   QgsRectangle rect( topLeft.x(), topLeft.y(), topLeft.x() + r.width()*res, topLeft.y() - r.height()*res );
+ 
+   setRect( rect );
+-  setVisible( true );
+ }
+ 
+ void QgsRubberBand::updatePosition( )
+--- a/tests/src/gui/testqgsrubberband.cpp
++++ b/tests/src/gui/testqgsrubberband.cpp
+@@ -46,6 +46,7 @@ class TestQgsRubberband : public QObject
+ 
+     void testAddSingleMultiGeometries(); //test for #7728
+     void testBoundingRect(); //test for #12392
++    void testVisibility(); //test for #12486
+ 
+   private:
+     QgsMapCanvas* mCanvas;
+@@ -153,6 +154,46 @@ void TestQgsRubberband::testBoundingRect
+ 
+ }
+ 
++void TestQgsRubberband::testVisibility()
++{
++  mRubberband = new QgsRubberBand( mCanvas, mPolygonLayer->geometryType() );
++
++  // Visibility is set to false by default
++  QCOMPARE( mRubberband->isVisible(), false );
++
++  // Check visibility after setting to empty geometry
++  QSharedPointer<QgsGeometry> emptyGeom( new QgsGeometry );
++  mRubberband->setToGeometry( emptyGeom.data(), mPolygonLayer );
++  QCOMPARE( mRubberband->isVisible(), false );
++
++  // Check that visibility changes
++  mRubberband->setVisible( true );
++  mRubberband->setToGeometry( emptyGeom.data(), mPolygonLayer );
++  QCOMPARE( mRubberband->isVisible(), false );
++
++  // Check visibility after setting to valid geometry
++  QSharedPointer<QgsGeometry> geom( QgsGeometry::fromWkt(
++      "POLYGON((10 10,10 30,30 30,30 10,10 10))"
++  ) );
++  mRubberband->setToGeometry( geom.data(), mPolygonLayer );
++  QCOMPARE( mRubberband->isVisible(), true );
++
++  // Add point without update
++  mRubberband->reset( true );
++  mRubberband->addPoint( QgsPoint( 10, 10 ), false );
++  QCOMPARE( mRubberband->isVisible(), false );
++
++  // Add point with update
++  mRubberband->addPoint( QgsPoint( 20, 20 ), true );
++  QCOMPARE( mRubberband->isVisible(), true );
++
++  // Check visibility after zoom (should not be changed)
++  mRubberband->setVisible( false );
++  mCanvas->zoomIn();
++  QCOMPARE( mRubberband->isVisible(), false );
++
++}
++
+ 
+ QTEST_MAIN( TestQgsRubberband )
+ #include "testqgsrubberband.moc"
diff --git a/debian/patches/0001-Fix-QgsWmsDpiMode-enum-declaration.patch b/debian/patches/0001-Fix-QgsWmsDpiMode-enum-declaration.patch
new file mode 100644
index 0000000..7c58d03
--- /dev/null
+++ b/debian/patches/0001-Fix-QgsWmsDpiMode-enum-declaration.patch
@@ -0,0 +1,22 @@
+From 790216fc375726e9e86799a51f9e92dffe14ffda Mon Sep 17 00:00:00 2001
+From: Anatoliy Golubev <darth.naihil at gmail.com>
+Date: Fri, 10 Apr 2015 16:53:49 +0300
+Subject: Fix QgsWmsDpiMode enum declaration
+Origin: https://github.com/qgis/QGIS/commit/790216fc375726e9e86799a51f9e92dffe14ffda
+
+(cherry picked from commit 1f58f3371f58e0d54fdcf8d1536d7dc741c984ff)
+---
+ src/providers/wms/qgswmscapabilities.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/providers/wms/qgswmscapabilities.h
++++ b/src/providers/wms/qgswmscapabilities.h
+@@ -420,7 +420,7 @@ enum QgsWmsDpiMode
+   dpiQGIS = 1,
+   dpiUMN = 2,
+   dpiGeoServer = 4,
+-  dpiAll = dpiQGIS | dpiUMN | dpiUMN,
++  dpiAll = dpiQGIS | dpiUMN | dpiGeoServer,
+ };
+ 
+ 
diff --git a/debian/patches/0001-Fix-buffer-size-was-incorrectly-stored-in-x-position.patch b/debian/patches/0001-Fix-buffer-size-was-incorrectly-stored-in-x-position.patch
new file mode 100644
index 0000000..2df1b88
--- /dev/null
+++ b/debian/patches/0001-Fix-buffer-size-was-incorrectly-stored-in-x-position.patch
@@ -0,0 +1,23 @@
+From 002739b611b814c9245fca4f3f79cf503e54f5e4 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Sat, 28 Mar 2015 18:19:46 +1100
+Subject: =?UTF-8?q?Fix=20buffer=20size=20was=20incorrectly=20stored=20in=20x?=
+ =?UTF-8?q?=20position=20data=20defined=0Afield=20for=20label=20properties=20?=
+ =?UTF-8?q?dialog?=
+Origin: https://github.com/qgis/QGIS/commit/002739b611b814c9245fca4f3f79cf503e54f5e4
+
+---
+ src/app/qgslabelpropertydialog.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/app/qgslabelpropertydialog.cpp
++++ b/src/app/qgslabelpropertydialog.cpp
+@@ -481,7 +481,7 @@ void QgsLabelPropertyDialog::on_mFontSiz
+ 
+ void QgsLabelPropertyDialog::on_mBufferSizeSpinBox_valueChanged( double d )
+ {
+-  insertChangedValue( QgsPalLayerSettings::PositionX, d );
++  insertChangedValue( QgsPalLayerSettings::BufferSize, d );
+ }
+ 
+ void QgsLabelPropertyDialog::on_mRotationSpinBox_valueChanged( double d )
diff --git a/debian/patches/0001-Fix-grid-annotation-distance-not-restored-in-dialog-.patch b/debian/patches/0001-Fix-grid-annotation-distance-not-restored-in-dialog-.patch
new file mode 100644
index 0000000..176f2c9
--- /dev/null
+++ b/debian/patches/0001-Fix-grid-annotation-distance-not-restored-in-dialog-.patch
@@ -0,0 +1,21 @@
+From 88b14c0c517adafabc363090cfb7465a635a5680 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Wed, 18 Mar 2015 17:53:53 +1100
+Subject: Fix grid annotation distance not restored in dialog (fix #11991)
+Bug: http://hub.qgis.org/issues/11991
+Origin: https://github.com/qgis/QGIS/commit/88b14c0c517adafabc363090cfb7465a635a5680
+
+---
+ src/app/qgsdecorationgriddialog.cpp |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/src/app/qgsdecorationgriddialog.cpp
++++ b/src/app/qgsdecorationgriddialog.cpp
+@@ -79,6 +79,7 @@ void QgsDecorationGridDialog::updateGuiE
+   mAnnotationDirectionComboBox->setCurrentIndex(( int ) mDeco.gridAnnotationDirection() );
+   mCoordinatePrecisionSpinBox->setValue( mDeco.gridAnnotationPrecision() );
+ 
++  mDistanceToMapFrameSpinBox->setValue( mDeco.annotationFrameDistance() );
+   // QPen gridPen = mDeco.gridPen();
+   // mLineWidthSpinBox->setValue( gridPen.widthF() );
+   // mLineColorButton->setColor( gridPen.color() );
diff --git a/debian/patches/0001-Fix-heatmap-renderer-not-working-for-reprojected-lay.patch b/debian/patches/0001-Fix-heatmap-renderer-not-working-for-reprojected-lay.patch
new file mode 100644
index 0000000..10796d4
--- /dev/null
+++ b/debian/patches/0001-Fix-heatmap-renderer-not-working-for-reprojected-lay.patch
@@ -0,0 +1,52 @@
+From e17ec09e5541dac8f69e2181e107228311b140ff Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Tue, 17 Mar 2015 19:20:31 +1100
+Subject: Fix heatmap renderer not working for reprojected layers (fix #12362)
+Bug: http://hub.qgis.org/issues/12362
+Origin: https://github.com/qgis/QGIS/commit/e17ec09e5541dac8f69e2181e107228311b140ff
+
+---
+ src/core/symbology-ng/qgsheatmaprenderer.cpp |   23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+--- a/src/core/symbology-ng/qgsheatmaprenderer.cpp
++++ b/src/core/symbology-ng/qgsheatmaprenderer.cpp
+@@ -107,8 +107,7 @@ bool QgsHeatmapRenderer::renderFeature(
+     return false;
+   }
+ 
+-  QgsGeometry* geom = feature.geometry();
+-  if ( geom->type() != QGis::Point )
++  if ( !feature.geometry() || feature.geometry()->type() != QGis::Point )
+   {
+     //can only render point type
+     return false;
+@@ -139,8 +138,28 @@ bool QgsHeatmapRenderer::renderFeature(
+   int width = context.painter()->device()->width() / mRenderQuality;
+   int height = context.painter()->device()->height() / mRenderQuality;
+ 
++  //transform geometry if required
++  QgsGeometry* geom;
++  bool createdGeom = false;
++  const QgsCoordinateTransform* xform = context.coordinateTransform();
++  if ( xform )
++  {
++    geom = new QgsGeometry( *feature.geometry() );
++    createdGeom = true;
++    geom->transform( *xform );
++  }
++  else
++  {
++    geom = feature.geometry();
++  }
++
+   //convert point to multipoint
+   QgsMultiPoint multiPoint = convertToMultipoint( geom );
++  if ( createdGeom )
++  {
++    delete geom;
++  }
++  geom = 0;
+ 
+   //loop through all points in multipoint
+   for ( QgsMultiPoint::const_iterator pointIt = multiPoint.constBegin(); pointIt != multiPoint.constEnd(); ++pointIt )
diff --git a/debian/patches/0001-Fix-incorrect-calculation-of-priority-for-diagrams-f.patch b/debian/patches/0001-Fix-incorrect-calculation-of-priority-for-diagrams-f.patch
new file mode 100644
index 0000000..e0f8ca1
--- /dev/null
+++ b/debian/patches/0001-Fix-incorrect-calculation-of-priority-for-diagrams-f.patch
@@ -0,0 +1,23 @@
+From 3117333117722d682e1ae1e9f9ee9799d2b9504d Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Mon, 13 Apr 2015 19:44:18 +1000
+Subject: Fix incorrect calculation of priority for diagrams (fix #4692)
+Bug: http://hub.qgis.org/issues/4692
+Origin: https://github.com/qgis/QGIS/commit/3117333117722d682e1ae1e9f9ee9799d2b9504d
+
+---
+ src/core/qgspallabeling.cpp |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/src/core/qgspallabeling.cpp
++++ b/src/core/qgspallabeling.cpp
+@@ -3382,7 +3382,8 @@ int QgsPalLabeling::prepareLayer( QgsVec
+ 
+ int QgsPalLabeling::addDiagramLayer( QgsVectorLayer* layer, const QgsDiagramLayerSettings *s )
+ {
+-  Layer* l = mPal->addLayer( layer->id().append( "d" ).toUtf8().data(), -1, -1, pal::Arrangement( s->placement ), METER, s->priority, s->obstacle, true, true );
++  double priority = 1 - s->priority / 10.0; // convert 0..10 --> 1..0
++  Layer* l = mPal->addLayer( layer->id().append( "d" ).toUtf8().data(), -1, -1, pal::Arrangement( s->placement ), METER, priority, s->obstacle, true, true );
+   l->setArrangementFlags( s->placementFlags );
+ 
+   mActiveDiagramLayers.insert( layer->id(), *s );
diff --git a/debian/patches/0001-Fix-power-validity-test-in-raster-calculator-fix-112.patch b/debian/patches/0001-Fix-power-validity-test-in-raster-calculator-fix-112.patch
new file mode 100644
index 0000000..60e1ade
--- /dev/null
+++ b/debian/patches/0001-Fix-power-validity-test-in-raster-calculator-fix-112.patch
@@ -0,0 +1,22 @@
+From 327517d0d93f5eabf62968e51c70b62b0bec2a95 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Mon, 16 Mar 2015 21:35:15 +1100
+Subject: Fix power validity test in raster calculator (fix #11278)
+Bug: http://hub.qgis.org/issues/11278
+Origin: https://github.com/qgis/QGIS/commit/327517d0d93f5eabf62968e51c70b62b0bec2a95
+
+---
+ src/analysis/raster/qgsrastermatrix.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/analysis/raster/qgsrastermatrix.cpp
++++ b/src/analysis/raster/qgsrastermatrix.cpp
+@@ -550,7 +550,7 @@ bool QgsRasterMatrix::twoArgumentOperati
+ 
+ bool QgsRasterMatrix::testPowerValidity( double base, double power )
+ {
+-  if (( base == 0 && power < 0 ) || ( power < 0 && ( power - floor( power ) ) > 0 ) )
++  if (( base == 0 && power < 0 ) || ( base < 0 && ( power - floor( power ) ) > 0 ) )
+   {
+     return false;
+   }
diff --git a/debian/patches/0001-Fix-primary-key-search.patch b/debian/patches/0001-Fix-primary-key-search.patch
new file mode 100644
index 0000000..05c1c43
--- /dev/null
+++ b/debian/patches/0001-Fix-primary-key-search.patch
@@ -0,0 +1,34 @@
+From f528d2b669d79f3310207964b39cc8b110a51ca7 Mon Sep 17 00:00:00 2001
+From: Sandro Mani <manisandro at gmail.com>
+Date: Tue, 14 Apr 2015 17:02:44 +0200
+Subject: Fix primary key search
+Origin: https://github.com/qgis/QGIS/commit/f528d2b669d79f3310207964b39cc8b110a51ca7
+
+(cherry picked from commit 265c253995ae755194df514a07ecaad35fd3ec57)
+---
+ src/providers/postgres/qgspostgresprovider.cpp     |    2 +-
+ src/providers/spatialite/qgsspatialiteprovider.cpp |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/providers/postgres/qgspostgresprovider.cpp
++++ b/src/providers/postgres/qgspostgresprovider.cpp
+@@ -2968,7 +2968,7 @@ QgsVectorLayerImport::ImportError QgsPos
+       {
+         // it already exists, try again with a new name
+         primaryKey = QString( "%1_%2" ).arg( pk ).arg( index++ );
+-        fldIdx = 0;
++        fldIdx = -1; // it is incremented in the for loop, i.e. restarts at 0
+       }
+     }
+   }
+--- a/src/providers/spatialite/qgsspatialiteprovider.cpp
++++ b/src/providers/spatialite/qgsspatialiteprovider.cpp
+@@ -157,7 +157,7 @@ QgsSpatiaLiteProvider::createEmptyLayer(
+         {
+           // it already exists, try again with a new name
+           primaryKey = QString( "%1_%2" ).arg( pk ).arg( index++ );
+-          fldIdx = 0;
++          fldIdx = -1; // it is incremented in the for loop, i.e. restarts at 0
+         }
+       }
+     }
diff --git a/debian/patches/0001-Fix-quoting-of-xfb-run-invocation.patch b/debian/patches/0001-Fix-quoting-of-xfb-run-invocation.patch
new file mode 100644
index 0000000..a9eb497
--- /dev/null
+++ b/debian/patches/0001-Fix-quoting-of-xfb-run-invocation.patch
@@ -0,0 +1,22 @@
+From a64ef9fed68c672ebc50b08c15ea54600308d94e Mon Sep 17 00:00:00 2001
+From: Sandro Santilli <strk at keybit.net>
+Date: Wed, 22 Apr 2015 19:47:24 +0200
+Subject: Fix quoting of xfb-run invocation
+Origin: https://github.com/qgis/QGIS/commit/a64ef9fed68c672ebc50b08c15ea54600308d94e
+
+Works For Me (Ubuntu 14.04.2)
+---
+ CMakeLists.txt |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -293,7 +293,7 @@ IF (ENABLE_TESTS)
+     IMMEDIATE @ONLY)
+   # For server side testing we have no X, we can use xfvb as a fake x
+   # sudo apt-get install xfvb
+-  add_custom_target(check-no-x COMMAND xvfb-run --server-args="-screen 10 1024x768x24" ctest --output-on-failure)
++  add_custom_target(check-no-x COMMAND xvfb-run --server-args=-screen\ 10\ 1024x768x24 ctest --output-on-failure)
+ ENDIF (ENABLE_TESTS)
+ 
+ IF (SUPPRESS_QT_WARNINGS)
diff --git a/debian/patches/0001-Fix-scale-dependant-rendering-of-diagrams-fix-10700.patch b/debian/patches/0001-Fix-scale-dependant-rendering-of-diagrams-fix-10700.patch
new file mode 100644
index 0000000..682d87d
--- /dev/null
+++ b/debian/patches/0001-Fix-scale-dependant-rendering-of-diagrams-fix-10700.patch
@@ -0,0 +1,74 @@
+From 15b60438c840984a0c1d9208cf86992c5555e6c1 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Mon, 13 Apr 2015 19:45:27 +1000
+Subject: Fix scale dependant rendering of diagrams (fix #10700)
+Bug: http://hub.qgis.org/issues/10700
+Origin: https://github.com/qgis/QGIS/commit/15b60438c840984a0c1d9208cf86992c5555e6c1
+
+---
+ src/core/diagram/qgstextdiagram.cpp |    7 -------
+ src/core/qgspallabeling.cpp         |   23 +++++++++++++++++++++--
+ 2 files changed, 21 insertions(+), 9 deletions(-)
+
+--- a/src/core/diagram/qgstextdiagram.cpp
++++ b/src/core/diagram/qgstextdiagram.cpp
+@@ -109,13 +109,6 @@ void QgsTextDiagram::renderDiagram( cons
+     return;
+   }
+ 
+-  double scaleDenominator = c.rendererScale();
+-  if (( s.minScaleDenominator != -1 && scaleDenominator < s.minScaleDenominator )
+-      || ( s.maxScaleDenominator != -1 && scaleDenominator > s.maxScaleDenominator ) )
+-  {
+-    return;
+-  }
+-
+   //convert from mm / map units to painter units
+   QSizeF spu = sizePainterUnits( s.size, s, c );
+   double w = spu.width();
+--- a/src/core/qgspallabeling.cpp
++++ b/src/core/qgspallabeling.cpp
+@@ -3418,6 +3418,26 @@ void QgsPalLabeling::registerDiagramFeat
+     return;
+   }
+ 
++  QgsDiagramRendererV2* dr = layerIt.value().renderer;
++  if ( dr )
++  {
++    QList<QgsDiagramSettings> settingList = dr->diagramSettings();
++    if ( settingList.size() > 0 )
++    {
++      double minScale = settingList.at( 0 ).minScaleDenominator;
++      if ( minScale > 0 && context.rendererScale() < minScale )
++      {
++        return;
++      }
++
++      double maxScale = settingList.at( 0 ).maxScaleDenominator;
++      if ( maxScale > 0 && context.rendererScale() > maxScale )
++      {
++        return;
++      }
++    }
++  }
++
+   //convert geom to geos
+   QgsGeometry* geom = feat.geometry();
+ 
+@@ -3456,7 +3476,6 @@ void QgsPalLabeling::registerDiagramFeat
+ 
+   double diagramWidth = 0;
+   double diagramHeight = 0;
+-  QgsDiagramRendererV2* dr = layerIt.value().renderer;
+   if ( dr )
+   {
+     QSizeF diagSize = dr->sizeMapUnits( feat, context );
+@@ -4004,7 +4023,7 @@ void QgsPalLabeling::drawLabeling( QgsRe
+           feature.setFields( &dit.value().fields );
+           palGeometry->feature( feature );
+           QgsPoint outPt = xform.transform(( *it )->getX(), ( *it )->getY() );
+-          dit.value().renderer->renderDiagram( feature, context, QPointF( outPt.x(), outPt.y() ) );
++          dit.value().renderer->renderDiagram( feature, context, outPt.toQPointF() );
+         }
+       }
+ 
diff --git a/debian/patches/0001-Fix-setting-min-in-raster-histogram-using-mouse-also.patch b/debian/patches/0001-Fix-setting-min-in-raster-histogram-using-mouse-also.patch
new file mode 100644
index 0000000..be9f9d7
--- /dev/null
+++ b/debian/patches/0001-Fix-setting-min-in-raster-histogram-using-mouse-also.patch
@@ -0,0 +1,21 @@
+From d371824acb383b56f6bde01a3baeb15ab8fb144b Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Sat, 11 Apr 2015 15:57:39 +1000
+Subject: Fix setting min in raster histogram using mouse also zooms chart
+Origin: https://github.com/qgis/QGIS/commit/d371824acb383b56f6bde01a3baeb15ab8fb144b
+
+---
+ src/gui/raster/qgsrasterhistogramwidget.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/gui/raster/qgsrasterhistogramwidget.cpp
++++ b/src/gui/raster/qgsrasterhistogramwidget.cpp
+@@ -1025,7 +1025,7 @@ void QgsRasterHistogramWidget::on_btnHis
+       QApplication::setOverrideCursor( Qt::PointingHandCursor );
+     }
+     if ( mHistoZoomer != NULL )
+-      mHistoZoomer->setEnabled( ! btnHistoMax->isChecked() );
++      mHistoZoomer->setEnabled( ! btnHistoMin->isChecked() );
+     mHistoPicker->setEnabled( btnHistoMin->isChecked() );
+   }
+   updateHistoMarkers();
diff --git a/debian/patches/0001-Fix-shortcut-keys-in-attribute-table-dialog-fix-1227.patch b/debian/patches/0001-Fix-shortcut-keys-in-attribute-table-dialog-fix-1227.patch
new file mode 100644
index 0000000..d61c87f
--- /dev/null
+++ b/debian/patches/0001-Fix-shortcut-keys-in-attribute-table-dialog-fix-1227.patch
@@ -0,0 +1,73 @@
+From 44a3fed28b9e2c3efd4c9a0f35d9a5d4cd7ea02c Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Thu, 19 Mar 2015 19:48:46 +1100
+Subject: Fix shortcut keys in attribute table dialog (fix #12272)
+Bug: http://hub.qgis.org/issues/12272
+Origin: https://github.com/qgis/QGIS/commit/44a3fed28b9e2c3efd4c9a0f35d9a5d4cd7ea02c
+
+---
+ src/ui/qgsattributetabledialog.ui |   25 ++++++++-----------------
+ 1 file changed, 8 insertions(+), 17 deletions(-)
+
+--- a/src/ui/qgsattributetabledialog.ui
++++ b/src/ui/qgsattributetabledialog.ui
+@@ -14,16 +14,7 @@
+    <string>Attribute Table</string>
+   </property>
+   <layout class="QGridLayout" name="gridLayout">
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
++   <property name="margin">
+     <number>0</number>
+    </property>
+    <property name="spacing">
+@@ -97,7 +88,7 @@
+         </size>
+        </property>
+        <property name="shortcut">
+-        <string>Ctrl+E</string>
++        <string>Ctrl+S</string>
+        </property>
+        <property name="checkable">
+         <bool>false</bool>
+@@ -263,7 +254,7 @@
+         </size>
+        </property>
+        <property name="shortcut">
+-        <string>Ctrl+S</string>
++        <string>Ctrl+R</string>
+        </property>
+        <property name="autoRaise">
+         <bool>true</bool>
+@@ -730,6 +721,11 @@
+  </widget>
+  <customwidgets>
+   <customwidget>
++   <class>QgsFieldExpressionWidget</class>
++   <extends>QWidget</extends>
++   <header>qgsfieldexpressionwidget.h</header>
++  </customwidget>
++  <customwidget>
+    <class>QgsFilterLineEdit</class>
+    <extends>QLineEdit</extends>
+    <header>qgsfilterlineedit.h</header>
+@@ -740,11 +736,6 @@
+    <header>qgsdualview.h</header>
+    <container>1</container>
+   </customwidget>
+-  <customwidget>
+-   <class>QgsFieldExpressionWidget</class>
+-   <extends>QWidget</extends>
+-   <header location="global">qgsfieldexpressionwidget.h</header>
+-  </customwidget>
+  </customwidgets>
+  <tabstops>
+   <tabstop>mRemoveSelectionButton</tabstop>
diff --git a/debian/patches/0001-GRASS-7.0.0-API-change.patch b/debian/patches/0001-GRASS-7.0.0-API-change.patch
new file mode 100644
index 0000000..07ef696
--- /dev/null
+++ b/debian/patches/0001-GRASS-7.0.0-API-change.patch
@@ -0,0 +1,56 @@
+From 8a43e909a8bd698f6f24a96dcc20162318186af5 Mon Sep 17 00:00:00 2001
+From: Radim Blazek <radim.blazek at gmail.com>
+Date: Thu, 12 Mar 2015 09:15:42 +0100
+Subject: GRASS 7.0.0 API change
+Origin: https://github.com/qgis/QGIS/commit/8a43e909a8bd698f6f24a96dcc20162318186af5
+
+---
+ src/providers/grass/qgsgrass.cpp |    9 ---------
+ src/providers/grass/qgsgrass.h   |   12 +++++++++++-
+ 2 files changed, 11 insertions(+), 10 deletions(-)
+
+--- a/src/providers/grass/qgsgrass.cpp
++++ b/src/providers/grass/qgsgrass.cpp
+@@ -50,15 +50,6 @@ extern "C"
+ #endif
+ }
+ 
+-#if GRASS_VERSION_MAJOR >= 7
+-#define G_suppress_masking Rast_suppress_masking
+-#define BOUND_BOX bound_box
+-#endif
+-
+-#if GRASS_VERSION_MAJOR > 7 || (GRASS_VERSION_MAJOR == 7 && GRASS_VERSION_MINOR >= 1)
+-#define G_available_mapsets G_get_available_mapsets
+-#endif
+-
+ #if !defined(GRASS_VERSION_MAJOR) || \
+     !defined(GRASS_VERSION_MINOR) || \
+     GRASS_VERSION_MAJOR<6 || \
+--- a/src/providers/grass/qgsgrass.h
++++ b/src/providers/grass/qgsgrass.h
+@@ -42,13 +42,23 @@ class QgsRectangle;
+ #define EXPAND(x) STR(x)
+ #define GRASS_VERSION_RELEASE_STRING EXPAND( GRASS_VERSION_RELEASE )
+ 
+-#if (GRASS_VERSION_MAJOR < 7) || (GRASS_VERSION_MAJOR == 7 && GRASS_VERSION_MINOR == 0)
++#if (GRASS_VERSION_MAJOR < 7)
+ #define G_TRY try { if( !setjmp( QgsGrass::jumper ) )
+ #else
+ #define G_TRY try { if( !setjmp(*G_fatal_longjmp(1)) )
+ #endif
+ #define G_CATCH else { throw QgsGrass::Exception( QgsGrass::errorMessage() ); } } catch
+ 
++#if GRASS_VERSION_MAJOR >= 7
++#define G_available_mapsets G_get_available_mapsets
++#define G__mapset_permissions2 G_mapset_permissions2
++#define G_suppress_masking Rast_suppress_masking
++#define G__get_window G_get_element_window
++#define G__getenv G_getenv_nofatal
++#define G__setenv G_setenv_nogisrc
++#define BOUND_BOX bound_box
++#endif
++
+ /*!
+    Methods for C library initialization and error handling.
+ */
diff --git a/debian/patches/0001-GRASS-fix-crash-in-browser-when-opening-GRASS-6-maps.patch b/debian/patches/0001-GRASS-fix-crash-in-browser-when-opening-GRASS-6-maps.patch
new file mode 100644
index 0000000..0042437
--- /dev/null
+++ b/debian/patches/0001-GRASS-fix-crash-in-browser-when-opening-GRASS-6-maps.patch
@@ -0,0 +1,29 @@
+From d8bd20e52c85f7bd58321cba8d7d631f58e262d4 Mon Sep 17 00:00:00 2001
+From: Radim Blazek <radim.blazek at gmail.com>
+Date: Tue, 31 Mar 2015 16:24:30 +0200
+Subject: [GRASS] fix crash in browser when opening GRASS 6 mapset with GRASS
+ 7
+Origin: https://github.com/qgis/QGIS/commit/d8bd20e52c85f7bd58321cba8d7d631f58e262d4
+
+---
+ src/providers/grass/qgsgrass.cpp |    9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+--- a/src/providers/grass/qgsgrass.cpp
++++ b/src/providers/grass/qgsgrass.cpp
+@@ -433,13 +433,8 @@ int QgsGrass::error_routine( const char
+     //throw QgsGrass::Exception( QString::fromUtf8( msg ) );
+     lastError = FATAL;
+ 
+-#if (GRASS_VERSION_MAJOR == 7) && (GRASS_VERSION_MINOR == 0)
+-    // G_fatal_error in GRASS 7.0.0beta1 always exits the second time it is called. This was fixed in 7.1.
+-    QMessageBox::warning( 0, QObject::tr( "Warning" ), QObject::tr( "Fatal error occurred in GRASS library. QGIS gets over the error but any next fatal error will cause QGIS exit without warning. This is a problem of GRASS 7.0.0beta1 but it is fixed in GRASS 7.1 and higher. Error message: %1" ).arg( msg ) );
+-#endif
+-
+-#if (GRASS_VERSION_MAJOR < 7) || (GRASS_VERSION_MAJOR == 7 && GRASS_VERSION_MINOR == 0)
+-    // longjump() is called by G_fatal_error in GRASS >= 7.1
++#if (GRASS_VERSION_MAJOR < 7)
++    // longjump() is called by G_fatal_error in GRASS >= 7
+     longjmp( QgsGrass::jumper, 1 );
+ #endif
+   }
diff --git a/debian/patches/0001-GRASS-mutex-function-called-by-browser-item-fixes-cr.patch b/debian/patches/0001-GRASS-mutex-function-called-by-browser-item-fixes-cr.patch
new file mode 100644
index 0000000..e85f17a
--- /dev/null
+++ b/debian/patches/0001-GRASS-mutex-function-called-by-browser-item-fixes-cr.patch
@@ -0,0 +1,102 @@
+From da527e7927456751475c8e1c7aece7d2b109cf28 Mon Sep 17 00:00:00 2001
+From: Radim Blazek <radim.blazek at gmail.com>
+Date: Wed, 1 Apr 2015 09:42:25 +0200
+Subject: [GRASS] mutex function called by browser item (fixes crash in
+ simultaneous loading, e.g. state restore)
+Origin: https://github.com/qgis/QGIS/commit/da527e7927456751475c8e1c7aece7d2b109cf28
+
+---
+ src/providers/grass/qgsgrass.cpp |   13 +++++++++++++
+ src/providers/grass/qgsgrass.h   |    4 ++++
+ 2 files changed, 17 insertions(+)
+
+--- a/src/providers/grass/qgsgrass.cpp
++++ b/src/providers/grass/qgsgrass.cpp
+@@ -57,6 +57,9 @@ extern "C"
+ #define G__setenv(name,value) G__setenv( ( char * ) (name), (char *) (value) )
+ #endif
+ 
++#define GRASS_LOCK sMutex.lock();
++#define GRASS_UNLOCK sMutex.unlock();
++
+ #ifdef Q_OS_WIN
+ #include <windows.h>
+ QString GRASS_LIB_EXPORT QgsGrass::shortPath( const QString &path )
+@@ -411,6 +414,8 @@ QString QgsGrass::mMapsetLock;
+ QString QgsGrass::mGisrc;
+ QString QgsGrass::mTmp;
+ 
++QMutex QgsGrass::sMutex;
++
+ int QgsGrass::error_routine( char *msg, int fatal )
+ {
+   return error_routine(( const char* ) msg, fatal );
+@@ -418,6 +423,9 @@ int QgsGrass::error_routine( char *msg,
+ 
+ int QgsGrass::error_routine( const char *msg, int fatal )
+ {
++  // G_fatal_error obviously is not thread safe (everything static in GRASS, especially fatal_jmp_buf)
++  // it means that anything which may end up with G_fatal_error must use mutex
++
+   // Unfortunately the exceptions thrown here can only be caught if GRASS libraries are compiled
+   // with -fexception option on Linux (works on Windows)
+   // GRASS developers are reluctant to add -fexception by default
+@@ -802,6 +810,7 @@ QStringList GRASS_LIB_EXPORT QgsGrass::v
+ QStringList GRASS_LIB_EXPORT QgsGrass::vectorLayers( QString gisdbase,
+     QString location, QString mapset, QString mapName )
+ {
++  GRASS_LOCK
+   QgsDebugMsg( QString( "gisdbase = %1 location = %2 mapset = %3 mapName = %4" ).arg( gisdbase ).arg( location ).arg( mapset ).arg( mapName ) );
+   QStringList list;
+ 
+@@ -826,6 +835,7 @@ QStringList GRASS_LIB_EXPORT QgsGrass::v
+   {
+     Q_UNUSED( e );
+     QgsDebugMsg( QString( "Cannot open GRASS vector: %1" ).arg( e.what() ) );
++    GRASS_UNLOCK
+     return list;
+   }
+ 
+@@ -839,12 +849,14 @@ QStringList GRASS_LIB_EXPORT QgsGrass::v
+ #ifndef Q_OS_WIN
+     Vect_close( &map );
+ #endif
++    GRASS_UNLOCK
+     return list;
+   }
+   else if ( level < 1 )
+   {
+     QgsDebugMsg( "Cannot open vector" );
+     QMessageBox::warning( 0, QObject::tr( "Warning" ), QObject::tr( "Cannot open vector %1 in mapset %2" ).arg( mapName ).arg( mapset ) );
++    GRASS_UNLOCK
+     return list;
+   }
+ 
+@@ -926,6 +938,7 @@ QStringList GRASS_LIB_EXPORT QgsGrass::v
+ 
+   Vect_close( &map );
+ 
++  GRASS_UNLOCK
+   return list;
+ }
+ 
+--- a/src/providers/grass/qgsgrass.h
++++ b/src/providers/grass/qgsgrass.h
+@@ -16,6 +16,8 @@
+ #ifndef QGSGRASS_H
+ #define QGSGRASS_H
+ 
++#include <QMutex>
++
+ #include <setjmp.h>
+ 
+ // GRASS header files
+@@ -308,6 +310,8 @@ class QgsGrass
+     static QString mGisrc;
+     // Temporary directory where GISRC and sockets are stored
+     static QString mTmp;
++    // Mutex for common locking when calling GRASS functions which are mostly non thread safe
++    static QMutex sMutex;
+ };
+ 
+ #endif // QGSGRASS_H
diff --git a/debian/patches/0001-Make-QgsPointLocator-discard-geometries-that-cannot-.patch b/debian/patches/0001-Make-QgsPointLocator-discard-geometries-that-cannot-.patch
new file mode 100644
index 0000000..904960c
--- /dev/null
+++ b/debian/patches/0001-Make-QgsPointLocator-discard-geometries-that-cannot-.patch
@@ -0,0 +1,65 @@
+From c9ec219f9105f204bc558b968bcc20bde002323f Mon Sep 17 00:00:00 2001
+From: Sandro Santilli <strk at keybit.net>
+Date: Fri, 24 Apr 2015 10:20:34 +0200
+Subject: Make QgsPointLocator discard geometries that cannot be projected
+Origin: https://github.com/qgis/QGIS/commit/c9ec219f9105f204bc558b968bcc20bde002323f
+
+Fix #12634 (crash snapping in measure tool)
+
+(cherry picked from commit 0480cabfc91353156c58285b5748ef1c83bbe5d7)
+---
+ src/core/qgspointlocator.cpp |   29 ++++++++++++++++++++++++++---
+ 1 file changed, 26 insertions(+), 3 deletions(-)
+
+--- a/src/core/qgspointlocator.cpp
++++ b/src/core/qgspointlocator.cpp
+@@ -633,7 +633,14 @@ bool QgsPointLocator::rebuildIndex( int
+   {
+     QgsRectangle rect = *mExtent;
+     if ( mTransform )
+-      rect = mTransform->transformBoundingBox( rect, QgsCoordinateTransform::ReverseTransform );
++    {
++      try {
++        rect = mTransform->transformBoundingBox( rect, QgsCoordinateTransform::ReverseTransform );
++      } catch (const QgsException& e) {
++        // See http://hub.qgis.org/issues/12634
++        QgsDebugMsg( QString("could not transform bounding box to map, skipping the snap filter (%1)").arg(e.what()) );
++      }
++    }
+     request.setFilterRect( rect );
+   }
+   QgsFeatureIterator fi = mLayer->getFeatures( request );
+@@ -644,7 +651,15 @@ bool QgsPointLocator::rebuildIndex( int
+       continue;
+ 
+     if ( mTransform )
+-      f.geometry()->transform( *mTransform );
++    {
++      try {
++        f.geometry()->transform( *mTransform );
++      } catch (const QgsException& e) {
++        // See http://hub.qgis.org/issues/12634
++        QgsDebugMsg( QString("could not transform geometry to map, skipping the snap for it (%1)").arg(e.what()) );
++        continue;
++      }
++    }
+ 
+     SpatialIndex::Region r( rect2region( f.geometry()->boundingBox() ) );
+     dataList << new RTree::Data( 0, 0, r, f.id() );
+@@ -708,7 +723,15 @@ void QgsPointLocator::onFeatureAdded( Qg
+       return;
+ 
+     if ( mTransform )
+-      f.geometry()->transform( *mTransform );
++    {
++      try {
++        f.geometry()->transform( *mTransform );
++      } catch (const QgsException& e) {
++        // See http://hub.qgis.org/issues/12634
++        QgsDebugMsg( QString("could not transform geometry to map, skipping the snap for it (%1)").arg(e.what()) );
++        return;
++      }
++    }
+ 
+     SpatialIndex::Region r( rect2region( f.geometry()->boundingBox() ) );
+     mRTree->insertData( 0, 0, r, f.id() );
diff --git a/debian/patches/0001-Partially-reverted-5e1b5a43-because-it-breaks-GRASS-.patch b/debian/patches/0001-Partially-reverted-5e1b5a43-because-it-breaks-GRASS-.patch
new file mode 100644
index 0000000..bb95274
--- /dev/null
+++ b/debian/patches/0001-Partially-reverted-5e1b5a43-because-it-breaks-GRASS-.patch
@@ -0,0 +1,27 @@
+From ab0010fc1eae96e30cac76ac0666be1e7f6cff3f Mon Sep 17 00:00:00 2001
+From: Radim Blazek <radim.blazek at gmail.com>
+Date: Wed, 8 Apr 2015 11:08:48 +0200
+Subject: Partially reverted 5e1b5a43 because it breaks GRASS create new
+ mapset
+Origin: https://github.com/qgis/QGIS/commit/ab0010fc1eae96e30cac76ac0666be1e7f6cff3f
+
+---
+ src/plugins/grass/qgsgrassnewmapset.cpp |    7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+--- a/src/plugins/grass/qgsgrassnewmapset.cpp
++++ b/src/plugins/grass/qgsgrassnewmapset.cpp
+@@ -1263,12 +1263,7 @@ void QgsGrassNewMapset::createMapset()
+ 
+     // TODO: add QgsGrass::setLocation or G_make_location with
+     //       database path
+-    if ( !QgsGrass::activeMode() ) // because it calls private QgsGrass::init()
+-    {
+-      QMessageBox::warning( this, tr( "Create mapset" ),
+-                            tr( "Cannot activate grass" ) );
+-      return;
+-    }
++    QgsGrass::activeMode(); // because it calls private QgsGrass::init()
+ 
+ #if defined(WIN32)
+     G__setenv(( char * ) "GISDBASE", QgsGrass::shortPath( mDatabaseLineEdit->text() ).toUtf8().data() );
diff --git a/debian/patches/0001-Processing-Avoid-consecutive-quotes-when-calling-OTB.patch b/debian/patches/0001-Processing-Avoid-consecutive-quotes-when-calling-OTB.patch
new file mode 100644
index 0000000..b446a77
--- /dev/null
+++ b/debian/patches/0001-Processing-Avoid-consecutive-quotes-when-calling-OTB.patch
@@ -0,0 +1,29 @@
+From 66580c475e27930fd259edbac6caec253d5ec069 Mon Sep 17 00:00:00 2001
+From: radosuav <rmgu at dhi-gras.com>
+Date: Tue, 7 Apr 2015 16:38:23 +0200
+Subject: [Processing] Avoid consecutive quotes when calling OTB algorithms.
+Origin: https://github.com/qgis/QGIS/commit/66580c475e27930fd259edbac6caec253d5ec069
+
+---
+ python/plugins/processing/algs/otb/OTBUtils.py |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/otb/OTBUtils.py
++++ b/python/plugins/processing/algs/otb/OTBUtils.py
+@@ -29,6 +29,7 @@ __copyright__ = '(C) 2012, Victor Olaya'
+ __revision__ = '$Format:%H$'
+ 
+ import os
++import re
+ from PyQt4.QtCore import QCoreApplication
+ from qgis.core import QgsApplication
+ import subprocess
+@@ -130,7 +131,7 @@ class OTBUtils:
+         loglines = []
+         loglines.append(OTBUtils.tr("OTB execution console output"))
+         os.putenv('ITK_AUTOLOAD_PATH', OTBUtils.otbLibPath())
+-        fused_command = ''.join(['"%s" ' % c for c in commands])
++        fused_command = ''.join(['"%s" ' % re.sub(r'^"|"$', '', c) for c in commands])
+         proc = subprocess.Popen(fused_command, shell=True, stdout=subprocess.PIPE, stdin=open(os.devnull),stderr=subprocess.STDOUT, universal_newlines=True).stdout
+         for line in iter(proc.readline, ""):
+             if "[*" in line:
diff --git a/debian/patches/0001-Properly-handle-non-matching-number-of-WMS-styles-an.patch b/debian/patches/0001-Properly-handle-non-matching-number-of-WMS-styles-an.patch
new file mode 100644
index 0000000..93dfe93
--- /dev/null
+++ b/debian/patches/0001-Properly-handle-non-matching-number-of-WMS-styles-an.patch
@@ -0,0 +1,63 @@
+From 96c3d92768e782d3b556735fee84073a02def7dd Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Wed, 22 Apr 2015 13:58:01 +0200
+Subject: Properly handle non matching number of WMS styles and layers in WMS
+ provider (inspired by PR #2001)
+Origin: https://github.com/qgis/QGIS/commit/96c3d92768e782d3b556735fee84073a02def7dd
+
+(cherry picked from commit bcb95137f07134c62094fdc68cb998d9a56409ab)
+---
+ src/providers/wms/qgswmsprovider.cpp |   10 ++++++----
+ src/providers/wms/qgswmsprovider.h   |    2 +-
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+--- a/src/providers/wms/qgswmsprovider.cpp
++++ b/src/providers/wms/qgswmsprovider.cpp
+@@ -123,7 +123,8 @@ QgsWmsProvider::QgsWmsProvider( QString
+     return;
+   }
+ 
+-  addLayers();
++  if ( !addLayers() )
++    return;
+ 
+   // if there are already parsed capabilities, use them!
+   if ( capabilities )
+@@ -265,15 +266,14 @@ QString QgsWmsProvider::getLegendGraphic
+   return url.isEmpty() ? url : prepareUri( url );
+ }
+ 
+-void QgsWmsProvider::addLayers()
++bool QgsWmsProvider::addLayers()
+ {
+   QgsDebugMsg( "Entering: layers:" + mSettings.mActiveSubLayers.join( ", " ) + ", styles:" + mSettings.mActiveSubStyles.join( ", " ) );
+ 
+   if ( mSettings.mActiveSubLayers.size() != mSettings.mActiveSubStyles.size() )
+   {
+     QgsMessageLog::logMessage( tr( "Number of layers and styles don't match" ), tr( "WMS" ) );
+-    mValid = false;
+-    return;
++    return false;
+   }
+ 
+   // Set the visibility of these new layers on by default
+@@ -290,6 +290,8 @@ void QgsWmsProvider::addLayers()
+     mTileLayer = 0;
+ 
+   QgsDebugMsg( "Exiting." );
++
++  return true;
+ }
+ 
+ void QgsWmsProvider::setConnectionName( QString const &connName )
+--- a/src/providers/wms/qgswmsprovider.h
++++ b/src/providers/wms/qgswmsprovider.h
+@@ -385,7 +385,7 @@ class QgsWmsProvider : public QgsRasterD
+     /**
+      * Add the list of WMS layer names to be rendered by this server
+      */
+-    void addLayers();
++    bool addLayers();
+ 
+     /**
+      * Set the image projection (in WMS CRS format) used in the transfer from the WMS server
diff --git a/debian/patches/0001-QgsMimeDataUtils-encode-fix-escape-also-backslash.patch b/debian/patches/0001-QgsMimeDataUtils-encode-fix-escape-also-backslash.patch
new file mode 100644
index 0000000..5313147
--- /dev/null
+++ b/debian/patches/0001-QgsMimeDataUtils-encode-fix-escape-also-backslash.patch
@@ -0,0 +1,28 @@
+From a2d673f500b9a1041b6898f33a91341fb1c74a07 Mon Sep 17 00:00:00 2001
+From: Radim Blazek <radim.blazek at gmail.com>
+Date: Thu, 23 Apr 2015 19:38:38 +0200
+Subject: QgsMimeDataUtils::encode fix (escape also backslash)
+Origin: https://github.com/qgis/QGIS/commit/a2d673f500b9a1041b6898f33a91341fb1c74a07
+
+---
+ src/core/qgsmimedatautils.cpp |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/src/core/qgsmimedatautils.cpp
++++ b/src/core/qgsmimedatautils.cpp
+@@ -44,6 +44,7 @@ QgsMimeDataUtils::Uri::Uri( QgsLayerItem
+ 
+ QgsMimeDataUtils::Uri::Uri( QString& encData )
+ {
++  QgsDebugMsg( "encData: " + encData );
+   QStringList decoded = decode( encData );
+   if ( decoded.size() < 4 )
+     return;
+@@ -119,6 +120,7 @@ QString QgsMimeDataUtils::encode( const
+   foreach ( const QString& item, items )
+   {
+     QString str = item;
++    str.replace( "\\", "\\\\" );
+     str.replace( ":", "\\:" );
+     encoded += str + ":";
+   }
diff --git a/debian/patches/0001-Redo-server-stop-processing-after-no-REQUEST-excepti.patch b/debian/patches/0001-Redo-server-stop-processing-after-no-REQUEST-excepti.patch
new file mode 100644
index 0000000..b02b8e1
--- /dev/null
+++ b/debian/patches/0001-Redo-server-stop-processing-after-no-REQUEST-excepti.patch
@@ -0,0 +1,24 @@
+From 02fd61bd8d069e701ef39de1005dde40d0a51eaa Mon Sep 17 00:00:00 2001
+From: Larry Shaffer <larrys at dakotacarto.com>
+Date: Thu, 19 Mar 2015 19:38:35 -0600
+Subject: Redo "server: stop processing after 'no REQUEST' exception (fixes
+ #11543)" from 1d3f8a7
+Bug: http://hub.qgis.org/issues/11543
+Origin: https://github.com/qgis/QGIS/commit/02fd61bd8d069e701ef39de1005dde40d0a51eaa
+
+- Accidentally removed during merge conflict in 670719c?
+---
+ src/server/qgswmsserver.cpp |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/src/server/qgswmsserver.cpp
++++ b/src/server/qgswmsserver.cpp
+@@ -112,6 +112,8 @@ void QgsWMSServer::executeRequest()
+   {
+     QgsDebugMsg( "unable to find 'REQUEST' parameter, exiting..." );
+     mRequestHandler->setServiceException( QgsMapServiceException( "OperationNotSupported", "Please check the value of the REQUEST parameter" ) );
++    cleanupAfterRequest();
++    return;
+   }
+ 
+   //version
diff --git a/debian/patches/0001-Remember-last-used-directory-for-raster-save-as-dial.patch b/debian/patches/0001-Remember-last-used-directory-for-raster-save-as-dial.patch
new file mode 100644
index 0000000..d59fba6
--- /dev/null
+++ b/debian/patches/0001-Remember-last-used-directory-for-raster-save-as-dial.patch
@@ -0,0 +1,53 @@
+From 44fec0e89b822ba78945b9c162ce1682e0c52bb9 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Mon, 16 Mar 2015 20:46:27 +1100
+Subject: Remember last used directory for raster save as dialog (fix #6950)
+Bug: http://hub.qgis.org/issues/6950
+Origin: https://github.com/qgis/QGIS/commit/44fec0e89b822ba78945b9c162ce1682e0c52bb9
+
+---
+ src/app/qgisapp.cpp                    |    3 +++
+ src/gui/qgsrasterlayersaveasdialog.cpp |    8 ++++++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/src/app/qgisapp.cpp
++++ b/src/app/qgisapp.cpp
+@@ -5022,6 +5022,9 @@ void QgisApp::saveAsRasterFile()
+                                 this );
+   if ( d.exec() == QDialog::Accepted )
+   {
++    QSettings settings;
++    settings.setValue( "/UI/lastRasterFileDir", QFileInfo( d.outputFileName() ).absolutePath() );
++
+     QgsRasterFileWriter fileWriter( d.outputFileName() );
+     if ( d.tileMode() )
+     {
+--- a/src/gui/qgsrasterlayersaveasdialog.cpp
++++ b/src/gui/qgsrasterlayersaveasdialog.cpp
+@@ -155,12 +155,16 @@ QgsRasterLayerSaveAsDialog::~QgsRasterLa
+ void QgsRasterLayerSaveAsDialog::on_mBrowseButton_clicked()
+ {
+   QString fileName;
++
++  QSettings settings;
++  QString dirName = mSaveAsLineEdit->text().isEmpty() ? settings.value( "/UI/lastRasterFileDir", "." ).toString() : mSaveAsLineEdit->text();
++
+   if ( mTileModeCheckBox->isChecked() )
+   {
+     while ( true )
+     {
+       // TODO: would not it be better to select .vrt file instead of directory?
+-      fileName = QFileDialog::getExistingDirectory( this, tr( "Select output directory" ) );
++      fileName = QFileDialog::getExistingDirectory( this, tr( "Select output directory" ), dirName );
+       //fileName = QFileDialog::getSaveFileName( this, tr( "Select output file" ), QString(), tr( "VRT" ) + " (*.vrt *.VRT)" );
+ 
+       if ( fileName.isEmpty() ) break; // canceled
+@@ -194,7 +198,7 @@ void QgsRasterLayerSaveAsDialog::on_mBro
+   }
+   else
+   {
+-    fileName = QFileDialog::getSaveFileName( this, tr( "Select output file" ), QString(), tr( "GeoTIFF" ) + " (*.tif *.tiff *.TIF *.TIFF)" );
++    fileName = QFileDialog::getSaveFileName( this, tr( "Select output file" ), dirName, tr( "GeoTIFF" ) + " (*.tif *.tiff *.TIF *.TIFF)" );
+   }
+ 
+   if ( !fileName.isEmpty() )
diff --git a/debian/patches/0001-Set-GDAL-env-vars-for-when-gdal-lib-is-bundled-in-ap.patch b/debian/patches/0001-Set-GDAL-env-vars-for-when-gdal-lib-is-bundled-in-ap.patch
new file mode 100644
index 0000000..8a4279d
--- /dev/null
+++ b/debian/patches/0001-Set-GDAL-env-vars-for-when-gdal-lib-is-bundled-in-ap.patch
@@ -0,0 +1,128 @@
+From c0c72d2cf4088422750e30738c6a547a8ce13bbd Mon Sep 17 00:00:00 2001
+From: Larry Shaffer <larrys at dakotacarto.com>
+Date: Fri, 20 Mar 2015 11:47:59 -0600
+Subject: Set GDAL env vars for when gdal lib is bundled in app on Mac
+Origin: https://github.com/qgis/QGIS/commit/c0c72d2cf4088422750e30738c6a547a8ce13bbd
+
+---
+ src/app/main.cpp           |   18 ++++++++++++++++++
+ src/browser/CMakeLists.txt |    2 ++
+ src/browser/main.cpp       |   28 ++++++++++++++++++++++++++++
+ tests/bench/CMakeLists.txt |    6 ++++++
+ tests/bench/main.cpp       |   18 ++++++++++++++++++
+ 5 files changed, 72 insertions(+)
+
+--- a/src/app/main.cpp
++++ b/src/app/main.cpp
+@@ -682,6 +682,24 @@ int main( int argc, char *argv[] )
+   {
+     setenv( "GDAL_DRIVER_PATH", gdalPlugins.toUtf8(), 1 );
+   }
++
++  // Point GDAL_DATA at any GDAL share directory embedded in the app bundle
++  if ( !getenv( "GDAL_DATA" ) )
++  {
++    QStringList gdalShares;
++    QString appResources( QDir::cleanPath( QgsApplication::pkgDataPath() ) );
++    gdalShares << QCoreApplication::applicationDirPath().append( "/share/gdal" )
++    << appResources.append( "/share/gdal" )
++    << appResources.append( "/gdal" );
++    Q_FOREACH ( const QString& gdalShare, gdalShares )
++    {
++      if ( QFile::exists( gdalShare ) )
++      {
++        setenv( "GDAL_DATA", gdalShare.toUtf8().constData(), 1 );
++        break;
++      }
++    }
++  }
+ #endif
+ 
+   QSettings mySettings;
+--- a/src/browser/CMakeLists.txt
++++ b/src/browser/CMakeLists.txt
+@@ -103,4 +103,6 @@ IF (APPLE)
+   INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../${QGIS_LIB_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/MacOS/lib\")")
+   INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_PLUGIN_SUBDIR}/.. \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/Plugins\")")
+   INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_DATA_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/Resources\")")
++  # may not exist, unless BundleUtilities are used
++  INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../share \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/MacOS/share\")")
+ ENDIF (APPLE)
+--- a/src/browser/main.cpp
++++ b/src/browser/main.cpp
+@@ -51,6 +51,34 @@ int main( int argc, char ** argv )
+   QCoreApplication::setOrganizationDomain( "qgis.org" );
+   QCoreApplication::setApplicationName( "QGIS2" );
+ 
++#ifdef Q_OS_MACX
++  // If the GDAL plugins are bundled with the application and GDAL_DRIVER_PATH
++  // is not already defined, use the GDAL plugins in the application bundle.
++  QString gdalPlugins( QCoreApplication::applicationDirPath().append( "/lib/gdalplugins" ) );
++  if ( QFile::exists( gdalPlugins ) && !getenv( "GDAL_DRIVER_PATH" ) )
++  {
++    setenv( "GDAL_DRIVER_PATH", gdalPlugins.toUtf8(), 1 );
++  }
++
++  // Point GDAL_DATA at any GDAL share directory embedded in the app bundle
++  if ( !getenv( "GDAL_DATA" ) )
++  {
++    QStringList gdalShares;
++    QString appResources( QDir::cleanPath( QgsApplication::pkgDataPath() ) );
++    gdalShares << QCoreApplication::applicationDirPath().append( "/share/gdal" )
++    << appResources.append( "/share/gdal" )
++    << appResources.append( "/gdal" );
++    Q_FOREACH ( const QString& gdalShare, gdalShares )
++    {
++      if ( QFile::exists( gdalShare ) )
++      {
++        setenv( "GDAL_DATA", gdalShare.toUtf8().constData(), 1 );
++        break;
++      }
++    }
++  }
++#endif
++
+   QgsBrowser w;
+ 
+   a.connect( &a, SIGNAL( aboutToQuit() ), &w, SLOT( saveWindowState() ) );
+--- a/tests/bench/CMakeLists.txt
++++ b/tests/bench/CMakeLists.txt
+@@ -53,5 +53,11 @@ INSTALL (TARGETS qgis_bench
+ )
+ IF (APPLE)
+   INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_FW_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/Frameworks\")")
++  INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../${QGIS_LIB_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/MacOS/lib\")")
++  INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_PLUGIN_SUBDIR}/.. \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/Plugins\")")
++  INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_DATA_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/Resources\")")
++  # may not exist, unless BundleUtilities are used
++  INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../share \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/MacOS/share\")")
++
+ ENDIF (APPLE)
+ 
+--- a/tests/bench/main.cpp
++++ b/tests/bench/main.cpp
+@@ -407,6 +407,24 @@ int main( int argc, char *argv[] )
+   {
+     setenv( "GDAL_DRIVER_PATH", gdalPlugins.toUtf8(), 1 );
+   }
++
++  // Point GDAL_DATA at any GDAL share directory embedded in the app bundle
++  if ( !getenv( "GDAL_DATA" ) )
++  {
++    QStringList gdalShares;
++    QString appResources( QDir::cleanPath( QgsApplication::pkgDataPath() ) );
++    gdalShares << QCoreApplication::applicationDirPath().append( "/share/gdal" )
++    << appResources.append( "/share/gdal" )
++    << appResources.append( "/gdal" );
++    Q_FOREACH ( const QString& gdalShare, gdalShares )
++    {
++      if ( QFile::exists( gdalShare ) )
++      {
++        setenv( "GDAL_DATA", gdalShare.toUtf8().constData(), 1 );
++        break;
++      }
++    }
++  }
+ #endif
+ 
+   QSettings mySettings;
diff --git a/debian/patches/0001-Standardise-use-of-red-minus-icon-fix-12425.patch b/debian/patches/0001-Standardise-use-of-red-minus-icon-fix-12425.patch
new file mode 100644
index 0000000..a1f85d7
--- /dev/null
+++ b/debian/patches/0001-Standardise-use-of-red-minus-icon-fix-12425.patch
@@ -0,0 +1,142 @@
+From 481b192e5bba63eb134488b6a97d9b5e5478f946 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Mon, 23 Mar 2015 18:21:47 +1100
+Subject: Standardise use of red minus icon (fix #12425)
+Bug: http://hub.qgis.org/issues/12425
+Origin: https://github.com/qgis/QGIS/commit/481b192e5bba63eb134488b6a97d9b5e5478f946
+
+---
+ python/plugins/processing/gui/BatchPanel.py          |    2 +-
+ src/app/qgsrasterlayerproperties.cpp                 |    2 +-
+ src/ui/qgscolordialog.ui                             |    2 +-
+ src/ui/qgscomposerlegendwidgetbase.ui                |    2 +-
+ src/ui/qgsfieldspropertiesbase.ui                    |    2 +-
+ src/ui/qgsoptionsbase.ui                             |    2 +-
+ src/ui/qgsprojectpropertiesbase.ui                   |    2 +-
+ src/ui/qgsrasterlayerpropertiesbase.ui               |    2 +-
+ src/ui/qgsrelationmanagerdialogbase.ui               |    2 +-
+ src/ui/qgsrulebasedrendererv2widget.ui               |    2 +-
+ src/ui/qgssinglebandpseudocolorrendererwidgetbase.ui |    2 +-
+ 11 files changed, 11 insertions(+), 11 deletions(-)
+
+--- a/python/plugins/processing/gui/BatchPanel.py
++++ b/python/plugins/processing/gui/BatchPanel.py
+@@ -62,7 +62,7 @@ class BatchPanel(QWidget, Ui_Form):
+ 
+         # Set icons
+         self.btnAdd.setIcon(QgsApplication.getThemeIcon('/mActionSignPlus.png'))
+-        self.btnRemove.setIcon(QgsApplication.getThemeIcon('/mActionSignMinus.png'))
++        self.btnRemove.setIcon(QgsApplication.getThemeIcon('/symbologyRemove.png'))
+         self.btnAdvanced.setIcon(QIcon(':/processing/images/alg.png'))
+ 
+         self.alg = alg
+--- a/src/app/qgsrasterlayerproperties.cpp
++++ b/src/app/qgsrasterlayerproperties.cpp
+@@ -149,7 +149,7 @@ QgsRasterLayerProperties::QgsRasterLayer
+ 
+   pbnAddValuesManually->setIcon( QgsApplication::getThemeIcon( "/mActionSignPlus.png" ) );
+   pbnAddValuesFromDisplay->setIcon( QgsApplication::getThemeIcon( "/mActionContextHelp.png" ) );
+-  pbnRemoveSelectedRow->setIcon( QgsApplication::getThemeIcon( "/mActionSignMinus.png" ) );
++  pbnRemoveSelectedRow->setIcon( QgsApplication::getThemeIcon( "/symbologyRemove.png" ) );
+   pbnDefaultValues->setIcon( QgsApplication::getThemeIcon( "/mActionOpenTable.png" ) );
+   pbnImportTransparentPixelValues->setIcon( QgsApplication::getThemeIcon( "/mActionFileOpen.svg" ) );
+   pbnExportTransparentPixelValues->setIcon( QgsApplication::getThemeIcon( "/mActionFileSave.svg" ) );
+--- a/src/ui/qgscolordialog.ui
++++ b/src/ui/qgscolordialog.ui
+@@ -626,7 +626,7 @@
+              </property>
+              <property name="icon">
+               <iconset resource="../../images/images.qrc">
+-               <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++               <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+              </property>
+             </widget>
+            </item>
+--- a/src/ui/qgscomposerlegendwidgetbase.ui
++++ b/src/ui/qgscomposerlegendwidgetbase.ui
+@@ -307,7 +307,7 @@
+               </property>
+               <property name="icon">
+                <iconset resource="../../images/images.qrc">
+-                <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++                <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+               </property>
+               <property name="iconSize">
+                <size>
+--- a/src/ui/qgsfieldspropertiesbase.ui
++++ b/src/ui/qgsfieldspropertiesbase.ui
+@@ -356,7 +356,7 @@ MyForms.py must live on PYTHONPATH, .qgi
+              </property>
+              <property name="icon">
+               <iconset resource="../../images/images.qrc">
+-               <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++               <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+              </property>
+             </widget>
+            </item>
+--- a/src/ui/qgsoptionsbase.ui
++++ b/src/ui/qgsoptionsbase.ui
+@@ -3102,7 +3102,7 @@
+                       </property>
+                       <property name="icon">
+                        <iconset resource="../../images/images.qrc">
+-                        <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++                        <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+                       </property>
+                      </widget>
+                     </item>
+--- a/src/ui/qgsprojectpropertiesbase.ui
++++ b/src/ui/qgsprojectpropertiesbase.ui
+@@ -717,7 +717,7 @@
+                       </property>
+                       <property name="icon">
+                        <iconset resource="../../images/images.qrc">
+-                        <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++                        <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+                       </property>
+                      </widget>
+                     </item>
+--- a/src/ui/qgsrasterlayerpropertiesbase.ui
++++ b/src/ui/qgsrasterlayerpropertiesbase.ui
+@@ -1330,7 +1330,7 @@
+                       </property>
+                       <property name="icon">
+                        <iconset resource="../../images/images.qrc">
+-                        <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++                        <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+                       </property>
+                      </widget>
+                     </item>
+--- a/src/ui/qgsrelationmanagerdialogbase.ui
++++ b/src/ui/qgsrelationmanagerdialogbase.ui
+@@ -81,7 +81,7 @@
+        </property>
+        <property name="icon">
+         <iconset resource="../../images/images.qrc">
+-         <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++         <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+        </property>
+       </widget>
+      </item>
+--- a/src/ui/qgsrulebasedrendererv2widget.ui
++++ b/src/ui/qgsrulebasedrendererv2widget.ui
+@@ -85,7 +85,7 @@
+        </property>
+        <property name="icon">
+         <iconset resource="../../images/images.qrc">
+-         <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++         <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+        </property>
+       </widget>
+      </item>
+--- a/src/ui/qgssinglebandpseudocolorrendererwidgetbase.ui
++++ b/src/ui/qgssinglebandpseudocolorrendererwidgetbase.ui
+@@ -66,7 +66,7 @@
+          </property>
+          <property name="icon">
+           <iconset resource="../../images/images.qrc">
+-           <normaloff>:/images/themes/default/mActionSignMinus.png</normaloff>:/images/themes/default/mActionSignMinus.png</iconset>
++           <normaloff>:/images/themes/default/symbologyRemove.png</normaloff>:/images/themes/default/symbologyRemove.png</iconset>
+          </property>
+         </widget>
+        </item>
diff --git a/debian/patches/0001-Update-CatchmentArea-FlowTracing-.txt.patch b/debian/patches/0001-Update-CatchmentArea-FlowTracing-.txt.patch
new file mode 100644
index 0000000..d74e07c
--- /dev/null
+++ b/debian/patches/0001-Update-CatchmentArea-FlowTracing-.txt.patch
@@ -0,0 +1,21 @@
+From 59df02a7d8c9a0b51e4f6ac522ca1136a1ee59c8 Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Wed, 8 Apr 2015 10:20:12 +0200
+Subject: Update CatchmentArea(FlowTracing).txt
+Origin: https://github.com/qgis/QGIS/commit/59df02a7d8c9a0b51e4f6ac522ca1136a1ee59c8
+
+---
+ .../algs/saga/description/2.1.3/CatchmentArea(FlowTracing).txt       |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(FlowTracing).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(FlowTracing).txt
+@@ -6,7 +6,7 @@ ParameterRaster|WEIGHT|Weight|True
+ ParameterRaster|MATERIAL|Material|True
+ ParameterRaster|TARGET|Target|True
+ ParameterNumber|STEP|Step|None|None|1
+-ParameterSelection|Method|Method|[0] Rho 8;[1] Kinematic Routing Algorithm;[2] DEMON
++ParameterSelection|METHOD|Method|[0] Rho 8;[1] Kinematic Routing Algorithm;[2] DEMON
+ ParameterNumber|MINDQV|DEMON - Min. DQV|None|None|0.0
+ ParameterBoolean|CORRECT         |Flow Correction|True
+ OutputRaster|CAREA|Catchment Area
diff --git a/debian/patches/0001-Update-CatchmentArea-Parallel-.txt.patch b/debian/patches/0001-Update-CatchmentArea-Parallel-.txt.patch
new file mode 100644
index 0000000..1128f4e
--- /dev/null
+++ b/debian/patches/0001-Update-CatchmentArea-Parallel-.txt.patch
@@ -0,0 +1,20 @@
+From c27a2a60aab0e28348c2b082de881f825eed288b Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Wed, 8 Apr 2015 10:21:27 +0200
+Subject: Update CatchmentArea(Parallel).txt
+Origin: https://github.com/qgis/QGIS/commit/c27a2a60aab0e28348c2b082de881f825eed288b
+
+Partial fix for https://hub.qgis.org/issues/12483
+---
+ .../algs/saga/description/2.1.3/CatchmentArea(Parallel).txt          |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Parallel).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Parallel).txt
+@@ -1,5 +1,5 @@
+ Catchment Area|Catchment Area (Parallel)
+ ta_hydrology
+ ParameterRaster|ELEVATION|Elevation|False
+-ParameterSelection|Method|Method|[0] Deterministic 8;[1] Rho 8;[2] Braunschweiger Reliefmodell;[3] Deterministic Infinity;[4] Multiple Flow Direction;[5] Multiple Triangular Flow Directon
++ParameterSelection|METHOD|Method|[0] Deterministic 8;[1] Rho 8;[2] Braunschweiger Reliefmodell;[3] Deterministic Infinity;[4] Multiple Flow Direction;[5] Multiple Triangular Flow Directon
+ OutputRaster|CAREA|Catchment Area
diff --git a/debian/patches/0001-Update-CatchmentArea-Recursive-.txt.patch b/debian/patches/0001-Update-CatchmentArea-Recursive-.txt.patch
new file mode 100644
index 0000000..63714cb
--- /dev/null
+++ b/debian/patches/0001-Update-CatchmentArea-Recursive-.txt.patch
@@ -0,0 +1,21 @@
+From 3dbab2c192551a70a1f25f5a674cb9817290f27b Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Wed, 8 Apr 2015 10:19:10 +0200
+Subject: Update CatchmentArea(Recursive).txt
+Origin: https://github.com/qgis/QGIS/commit/3dbab2c192551a70a1f25f5a674cb9817290f27b
+
+---
+ .../algs/saga/description/2.1.3/CatchmentArea(Recursive).txt         |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Recursive).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Recursive).txt
+@@ -7,7 +7,7 @@ ParameterRaster|MATERIAL|Material|True
+ ParameterRaster|TARGET|Target|True
+ ParameterNumber|STEP|Step|None|None|1
+ ParameterRaster|TARGETS|Target Areas|True
+-ParameterSelection|Method|Method|[0] Deterministic 8;[1] Rho 8;[2] Deterministic Infinity;[3] Multiple Flow Direction
++ParameterSelection|METHOD|Method|[0] Deterministic 8;[1] Rho 8;[2] Deterministic Infinity;[3] Multiple Flow Direction
+ ParameterNumber|CONVERGENCE|Convergence|None|None|1.1
+ OutputRaster|CAREA|Catchment Area
+ OutputRaster|CHEIGHT|Catchment Height
diff --git a/debian/patches/0001-Update-Mac-bundling-for-qgis_server-lib.patch b/debian/patches/0001-Update-Mac-bundling-for-qgis_server-lib.patch
new file mode 100644
index 0000000..9dc794a
--- /dev/null
+++ b/debian/patches/0001-Update-Mac-bundling-for-qgis_server-lib.patch
@@ -0,0 +1,63 @@
+From cb73f3381f76cdca403295b6926874efa9008495 Mon Sep 17 00:00:00 2001
+From: Larry Shaffer <larrys at dakotacarto.com>
+Date: Fri, 20 Feb 2015 15:48:17 -0700
+Subject: Update Mac bundling for qgis_server lib
+Origin: https://github.com/qgis/QGIS/commit/cb73f3381f76cdca403295b6926874efa9008495
+
+---
+ cmake/MacBundleMacros.cmake |    6 +++++-
+ mac/cmake/0qgis.cmake.in    |    5 +++++
+ src/server/CMakeLists.txt   |    4 ++++
+ 3 files changed, 14 insertions(+), 1 deletion(-)
+
+--- a/cmake/MacBundleMacros.cmake
++++ b/cmake/MacBundleMacros.cmake
+@@ -133,11 +133,12 @@ FUNCTION (UPDATEQGISPATHS LIBFROM LIBTO)
+         FOREACH (QL ${QGFWLIST})
+             INSTALLNAMETOOL_CHANGE ("${LIBFROM}" "${LIB_CHG_TO}" "${QFWDIR}/${QL}.framework/${QL}")
+         ENDFOREACH (QL)
+-        # libqgispython is not a framework
++        # libqgispython and libqgis_server are not frameworks
+         IF (${OSX_HAVE_LOADERPATH})
+             SET (LIB_CHG_TO "${ATLOADER}/${QGIS_LIB_SUBDIR_REV}/${LIBMID}/${LIBPOST}")
+         ENDIF ()
+         INSTALLNAMETOOL_CHANGE ("${LIBFROM}" "${LIB_CHG_TO}" "${QLIBDIR}/libqgispython.dylib")
++        INSTALLNAMETOOL_CHANGE ("${LIBFROM}" "${LIB_CHG_TO}" "${QLIBDIR}/libqgis_server.dylib")
+         # crssync
+         IF (${OSX_HAVE_LOADERPATH})
+             SET (LIB_CHG_TO "${ATEXECUTABLE}/${QGIS_LIBEXEC_SUBDIR_REV}/${LIBMID}/${LIBPOST}")
+@@ -200,6 +201,9 @@ ENDFOREACH (QARCH)
+ FILE (GLOB QGFWLIST RELATIVE "${QFWDIR}" "${QFWDIR}/qgis*.framework")
+ # for some reason, REPLACE is stripping list seps
+ STRING(REPLACE ".framework" ";" QGFWLIST ${QGFWLIST})
++# don't collect any library symlinks, limit to versioned libs
++SET (Q_LIBVER ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR})
++FILE (GLOB QGLIBLIST  RELATIVE "${QLIBDIR}" "${QLIBDIR}/libqgis*.${Q_LIBVER}*.dylib")
+ FILE (GLOB QGPLUGLIST "${QPLUGDIR}/*.so")
+ FILE (GLOB QGPYLIST "${QGISPYDIR}/qgis/*.so")
+ FILE (GLOB QGAPPLIST RELATIVE "${QBINDIR}" "${QBINDIR}/q*.app")
+--- a/mac/cmake/0qgis.cmake.in
++++ b/mac/cmake/0qgis.cmake.in
+@@ -25,4 +25,9 @@ IF (@OSX_HAVE_LOADERPATH@)
+             EXECUTE_PROCESS(COMMAND install_name_tool -id "${ATEXECUTABLE}/${QGIS_FW_SUBDIR}/${QL}.framework/${QL}" "${QFWDIR}/${QL}.framework/${QL}")
+         ENDIF ()
+     ENDFOREACH (QL)
++    FOREACH (QLIB ${QGLIBLIST})
++        GET_INSTALL_NAME ("${QLIBDIR}/${QLIB}" ${QLIB} QQ)
++        SET (QLIB_CHG "${QQ}")
++        UPDATEQGISPATHS ("${QLIB_CHG}" ${QLIB})
++    ENDFOREACH (QLIB)
+ ENDIF (@OSX_HAVE_LOADERPATH@)
+--- a/src/server/CMakeLists.txt
++++ b/src/server/CMakeLists.txt
+@@ -109,6 +109,10 @@ TARGET_LINK_LIBRARIES(qgis_server
+   ${GDAL_LIBRARY}
+ )
+ 
++IF (APPLE)
++  SET_TARGET_PROPERTIES(qgis_server PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
++ENDIF (APPLE)
++
+ IF (WITH_SERVER_PLUGINS)
+ # install
+ 
diff --git a/debian/patches/0001-Update-MultilevelB-SplineInterpolation-fromGrid-.txt.patch b/debian/patches/0001-Update-MultilevelB-SplineInterpolation-fromGrid-.txt.patch
new file mode 100644
index 0000000..76a2a93
--- /dev/null
+++ b/debian/patches/0001-Update-MultilevelB-SplineInterpolation-fromGrid-.txt.patch
@@ -0,0 +1,21 @@
+From 8d7d7fdbaaf01f6f8d3cf21e40d93754a8c9a3ac Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Wed, 8 Apr 2015 17:48:09 +0200
+Subject: Update MultilevelB-SplineInterpolation(fromGrid).txt
+Origin: https://github.com/qgis/QGIS/commit/8d7d7fdbaaf01f6f8d3cf21e40d93754a8c9a3ac
+
+Partial fix for https://hub.qgis.org/issues/12519
+---
+ .../2.1.3/MultilevelB-SplineInterpolation(fromGrid).txt            |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/MultilevelB-SplineInterpolation(fromGrid).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/MultilevelB-SplineInterpolation(fromGrid).txt
+@@ -7,5 +7,5 @@ ParameterNumber|EPSILON|Threshold Error|
+ ParameterNumber|LEVEL_MAX|Maximum Level|None|None|11.0
+ ParameterSelection|DATATYPE|Data Type|[0] same as input grid;[1] floating point
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+-ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
++ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
++OutputRaster|TARGET_OUT_GRID|Grid
diff --git a/debian/patches/0001-Update-MultilevelB-SplineInterpolation.txt.patch b/debian/patches/0001-Update-MultilevelB-SplineInterpolation.txt.patch
new file mode 100644
index 0000000..3f35626
--- /dev/null
+++ b/debian/patches/0001-Update-MultilevelB-SplineInterpolation.txt.patch
@@ -0,0 +1,21 @@
+From d514655631e0c91c92be230c48bb8b4329e94b72 Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Wed, 8 Apr 2015 10:33:12 +0200
+Subject: Update MultilevelB-SplineInterpolation.txt
+Origin: https://github.com/qgis/QGIS/commit/d514655631e0c91c92be230c48bb8b4329e94b72
+
+Partial fix for https://hub.qgis.org/issues/12519
+---
+ .../saga/description/2.1.3/MultilevelB-SplineInterpolation.txt     |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/MultilevelB-SplineInterpolation.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/MultilevelB-SplineInterpolation.txt
+@@ -7,5 +7,5 @@ ParameterSelection|METHOD|Method|[0] wit
+ ParameterNumber|EPSILON|Threshold Error|None|None|0.0001
+ ParameterNumber|LEVEL_MAX|Maximum Level|None|None|11.0
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+-ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
++ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
++OutputRaster|TARGET_OUT_GRID|Grid
diff --git a/debian/patches/0001-Update-ShapestoGrid.txt-2.patch b/debian/patches/0001-Update-ShapestoGrid.txt-2.patch
new file mode 100644
index 0000000..db75ba1
--- /dev/null
+++ b/debian/patches/0001-Update-ShapestoGrid.txt-2.patch
@@ -0,0 +1,22 @@
+From 398b18212c34f732af5c42242cbd578dece01299 Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Fri, 17 Apr 2015 17:04:27 +0200
+Subject: Update ShapestoGrid.txt
+Origin: https://github.com/qgis/QGIS/commit/398b18212c34f732af5c42242cbd578dece01299
+
+Better default for saga rasterization
+---
+ .../plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt  |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
+@@ -3,7 +3,7 @@ grid_gridding
+ ParameterVector|INPUT|Shapes|-1|False
+ ParameterTableField|FIELD|Attribute|INPUT|-1|False
+ ParameterSelection|OUTPUT|Output Values|[0] data / no-data;[1] index number; [2] attribute|2
+-ParameterSelection|MULTIPLE|Method for Multiple Values|[0] first;[1] last;[2] minimum;[3] maximum;[4] mean
++ParameterSelection|MULTIPLE|Method for Multiple Values|[0] first;[1] last;[2] minimum;[3] maximum;[4] mean|4
+ ParameterSelection|LINE_TYPE|Method for Lines|[0] thin;[1] thick
+ ParameterSelection|POLY_TYPE|Polygon|[0] node;[1] cell
+ ParameterSelection|GRID_TYPE|Preferred Target Grid Type|[0] Integer (1 byte);[1] Integer (2 byte);[2] Integer (4 byte);[3] Floating Point (4 byte);[4] Floating Point (8 byte)|3
diff --git a/debian/patches/0001-Update-ShapestoGrid.txt.patch b/debian/patches/0001-Update-ShapestoGrid.txt.patch
new file mode 100644
index 0000000..c2e66a7
--- /dev/null
+++ b/debian/patches/0001-Update-ShapestoGrid.txt.patch
@@ -0,0 +1,32 @@
+From 5404bcdbb3aa5387b9e9988170804dd866271e06 Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Thu, 9 Apr 2015 20:11:34 +0200
+Subject: Update ShapestoGrid.txt
+Origin: https://github.com/qgis/QGIS/commit/5404bcdbb3aa5387b9e9988170804dd866271e06
+
+Better defaults for Shapes to grid
+---
+ .../processing/algs/saga/description/2.1.3/ShapestoGrid.txt      |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
+@@ -2,14 +2,14 @@ Shapes to Grid
+ grid_gridding
+ ParameterVector|INPUT|Shapes|-1|False
+ ParameterTableField|FIELD|Attribute|INPUT|-1|False
+-ParameterSelection|OUTPUT|Output Values|[0] data / no-data;[1] index number; [2] attribute
++ParameterSelection|OUTPUT|Output Values|[0] data / no-data;[1] index number; [2] attribute|2
+ ParameterSelection|MULTIPLE|Method for Multiple Values|[0] first;[1] last;[2] minimum;[3] maximum;[4] mean
+ ParameterSelection|LINE_TYPE|Method for Lines|[0] thin;[1] thick
+ ParameterSelection|POLY_TYPE|Polygon|[0] node;[1] cell
+-ParameterSelection|GRID_TYPE|Preferred Target Grid Type|[0] Integer (1 byte);[1] Integer (2 byte);[2] Integer (4 byte);[3] Floating Point (4 byte);[4] Floating Point (8 byte)
++ParameterSelection|GRID_TYPE|Preferred Target Grid Type|[0] Integer (1 byte);[1] Integer (2 byte);[2] Integer (4 byte);[3] Floating Point (4 byte);[4] Floating Point (8 byte)|3
+ ParameterSelection|TARGET_DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
+ ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells
+ OutputRaster|TARGET_OUT_GRID|Target Grid
+-OutputRaster|TARGET_COUNT|Number of Values
+\ No newline at end of file
++OutputRaster|TARGET_COUNT|Number of Values
diff --git a/debian/patches/0001-Update-Slope-Aspect-Curvature.txt.patch b/debian/patches/0001-Update-Slope-Aspect-Curvature.txt.patch
new file mode 100644
index 0000000..fdaf5b3
--- /dev/null
+++ b/debian/patches/0001-Update-Slope-Aspect-Curvature.txt.patch
@@ -0,0 +1,31 @@
+From 4cfbe5996850d15a0f4a58551983fa47f2c41722 Mon Sep 17 00:00:00 2001
+From: Paolo Cavallini <cavallini at faunalia.it>
+Date: Thu, 16 Apr 2015 17:21:15 +0200
+Subject: Update Slope,Aspect,Curvature.txt
+Origin: https://github.com/qgis/QGIS/commit/4cfbe5996850d15a0f4a58551983fa47f2c41722
+
+Better defaults for slope and aspect in saga:processing
+---
+ .../algs/saga/description/2.1.3/Slope,Aspect,Curvature.txt       |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/Slope,Aspect,Curvature.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/Slope,Aspect,Curvature.txt
+@@ -2,8 +2,8 @@ Slope, Aspect, Curvature
+ ta_morphometry
+ ParameterRaster|ELEVATION|Elevation|False
+ ParameterSelection|METHOD|Method|[0] Maximum Slope (Travis et al. 1975);[1] Maximum Triangle Slope (Tarboton 1997);[2] Least Squares Fitted Plane (Horn 1981, Costa-Cabral & Burgess 1996);[3] 6 parameter 2nd order polynom (Evans 1979);[4] 6 parameter 2nd order polynom (Heerdegen & Beran 1982);[5] 6 parameter 2nd order polynom (Bauer, Rohdenburg, Bork 1985);[6] 9 parameter 2nd order polynom (Zevenbergen & Thorne 1987);[7]10 parameter 3rd order polynom (Haralick 1983)|6
+-ParameterSelection|UNIT_SLOPE|Slope Units|[0] radians;[1] degree;[2] percent|0
+-ParameterSelection|UNIT_ASPECT|Aspect Units|[0] radians;[1] degree|0
++ParameterSelection|UNIT_SLOPE|Slope Units|[0] radians;[1] degree;[2] percent|1
++ParameterSelection|UNIT_ASPECT|Aspect Units|[0] radians;[1] degree|1
+ OutputRaster|SLOPE|Slope
+ OutputRaster|ASPECT|Aspect
+ OutputRaster|C_GENE|General Curvature
+@@ -15,4 +15,4 @@ OutputRaster|C_CROS|Cross-Sectional Curv
+ OutputRaster|C_MINI|Minimal Curvature
+ OutputRaster|C_MAXI|Maximal Curvature
+ OutputRaster|C_TOTA|Total Curvature
+-OutputRaster|C_ROTO|Flow-Line Curvature
+\ No newline at end of file
++OutputRaster|C_ROTO|Flow-Line Curvature
diff --git a/debian/patches/0001-Various-fixes-to-Processing-algs-fix-for-http-hub.qg.patch b/debian/patches/0001-Various-fixes-to-Processing-algs-fix-for-http-hub.qg.patch
new file mode 100644
index 0000000..122d2f1
--- /dev/null
+++ b/debian/patches/0001-Various-fixes-to-Processing-algs-fix-for-http-hub.qg.patch
@@ -0,0 +1,134 @@
+From 593027ebf32d7a622f14895dd5e0258720b996a0 Mon Sep 17 00:00:00 2001
+From: pcav <cavallini at faunalia.it>
+Date: Fri, 10 Apr 2015 09:19:21 +0200
+Subject: Various fixes to Processing algs; fix for
+ http://hub.qgis.org/issues/12537
+Bug: http://hub.qgis.org/issues/12537
+Origin: https://github.com/qgis/QGIS/commit/593027ebf32d7a622f14895dd5e0258720b996a0
+
+Conflicts:
+	python/plugins/processing/algs/gdal/ogr2ogrbuffer.py
+	python/plugins/processing/algs/gdal/ogr2ogrdissolve.py
+---
+ python/plugins/processing/algs/gdal/rasterize.py                   |    2 +-
+ python/plugins/processing/algs/gdal/translate.py                   |    4 ++--
+ python/plugins/processing/algs/gdal/warp.py                        |    4 ++--
+ .../plugins/processing/algs/grass/description/v.buffer.column.txt  |    2 +-
+ .../processing/algs/grass/description/v.buffer.distance.txt        |    2 +-
+ .../plugins/processing/algs/grass7/description/v.buffer.column.txt |    2 +-
+ .../processing/algs/grass7/description/v.buffer.distance.txt       |    2 +-
+ .../processing/algs/saga/description/2.1.3/ClipGridwithPolygon.txt |    2 +-
+ .../processing/algs/saga/description/2.1.3/ShapestoGrid.txt        |    2 +-
+ .../algs/saga/description/2.1.3/VectorisingGridClasses.txt         |    2 +-
+ 10 files changed, 12 insertions(+), 12 deletions(-)
+
+--- a/python/plugins/processing/algs/gdal/rasterize.py
++++ b/python/plugins/processing/algs/gdal/rasterize.py
+@@ -86,7 +86,7 @@ class rasterize(OgrAlgorithm):
+             self.tr("Nodata value"),
+             '-9999'))
+         self.addParameter(ParameterSelection(self.COMPRESS,
+-            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 0))
++            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 5))
+         self.addParameter(ParameterNumber(self.JPEGCOMPRESSION,
+             self.tr('Set the JPEG compression level'),
+             1, 100, 75))
+--- a/python/plugins/processing/algs/gdal/translate.py
++++ b/python/plugins/processing/algs/gdal/translate.py
+@@ -90,7 +90,7 @@ class translate(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+         self.addParameter(ParameterSelection(self.COMPRESS,
+-            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 0))
++            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 5))
+         self.addParameter(ParameterNumber(self.JPEGCOMPRESSION,
+             self.tr('Set the JPEG compression level'),
+             1, 100, 75))
+@@ -108,7 +108,7 @@ class translate(GdalAlgorithm):
+             self.tr('Force the generation of an associated ESRI world file (.tfw))'), False))
+         self.addParameter(ParameterString(self.EXTRA,
+             self.tr('Additional creation parameters'), '', optional=True))
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Translated')))
+ 
+     def processAlgorithm(self, progress):
+         out = self.getOutputValue(translate.OUTPUT)
+--- a/python/plugins/processing/algs/gdal/warp.py
++++ b/python/plugins/processing/algs/gdal/warp.py
+@@ -78,7 +78,7 @@ class warp(GdalAlgorithm):
+         self.addParameter(ParameterSelection(self.RTYPE,
+             self.tr('Output raster type'), self.TYPE, 5))
+         self.addParameter(ParameterSelection(self.COMPRESS,
+-            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 0))
++            self.tr('GeoTIFF options. Compression type:'), self.COMPRESSTYPE, 5))
+         self.addParameter(ParameterNumber(self.JPEGCOMPRESSION,
+             self.tr('Set the JPEG compression level'),
+             1, 100, 75))
+@@ -96,7 +96,7 @@ class warp(GdalAlgorithm):
+             self.tr('Force the generation of an associated ESRI world file (.tfw))'), False))
+         self.addParameter(ParameterString(self.EXTRA,
+             self.tr('Additional creation parameters'), '', optional=True))
+-        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
++        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Warped')))
+ 
+     def processAlgorithm(self, progress):
+         noData = str(self.getParameterValue(self.NO_DATA))
+--- a/python/plugins/processing/algs/grass/description/v.buffer.column.txt
++++ b/python/plugins/processing/algs/grass/description/v.buffer.column.txt
+@@ -7,5 +7,5 @@ ParameterNumber|scale|Scaling factor for
+ ParameterString|tolerance|Maximum distance between theoretical arc and polygon segments as multiple of buffer|0.01
+ ParameterBoolean|-s|Make outside corners straight|False
+ ParameterBoolean|-c|Don't make caps at the ends of polylines|False
+-OutputVector|output|Output buffer
++OutputVector|output|Buffer
+ 
+--- a/python/plugins/processing/algs/grass/description/v.buffer.distance.txt
++++ b/python/plugins/processing/algs/grass/description/v.buffer.distance.txt
+@@ -6,5 +6,5 @@ ParameterString|distance|Buffer distance
+ ParameterString|tolerance|Maximum distance between theoretical arc and polygon segments as multiple of buffer|0.01
+ ParameterBoolean|-s|Make outside corners straight|False
+ ParameterBoolean|-c|Don't make caps at the ends of polylines|False
+-OutputVector|output|Output buffer
++OutputVector|output|Buffer
+ 
+--- a/python/plugins/processing/algs/grass7/description/v.buffer.column.txt
++++ b/python/plugins/processing/algs/grass7/description/v.buffer.column.txt
+@@ -7,4 +7,4 @@ ParameterNumber|scale|Scaling factor for
+ ParameterString|tolerance|Maximum distance between theoretical arc and polygon segments as multiple of buffer|0.01
+ ParameterBoolean|-s|Make outside corners straight|False
+ ParameterBoolean|-c|Do not make caps at the ends of polylines|False
+-OutputVector|output|Output buffer
++OutputVector|output|Buffer
+--- a/python/plugins/processing/algs/grass7/description/v.buffer.distance.txt
++++ b/python/plugins/processing/algs/grass7/description/v.buffer.distance.txt
+@@ -6,4 +6,4 @@ ParameterString|distance|Buffer distance
+ ParameterString|tolerance|Maximum distance between theoretical arc and polygon segments as multiple of buffer|0.01
+ ParameterBoolean|-s|Make outside corners straight|False
+ ParameterBoolean|-c|Do not make caps at the ends of polylines|False
+-OutputVector|output|Output buffer
++OutputVector|output|Buffer
+--- a/python/plugins/processing/algs/saga/description/2.1.3/ClipGridwithPolygon.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/ClipGridwithPolygon.txt
+@@ -2,4 +2,4 @@ Clip Grid with Polygon
+ shapes_grid
+ ParameterRaster|INPUT|Input|False
+ ParameterVector|POLYGONS|Polygons|2|False
+-OutputRaster|OUTPUT|Output
++OutputRaster|OUTPUT|Clipped
+--- a/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
+@@ -11,5 +11,5 @@ ParameterSelection|TARGET_DEFINITION|Tar
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
+ ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells
+-OutputRaster|TARGET_OUT_GRID|Target Grid
++OutputRaster|TARGET_OUT_GRID|Rasterized
+ OutputRaster|TARGET_COUNT|Number of Values
+--- a/python/plugins/processing/algs/saga/description/2.1.3/VectorisingGridClasses.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/VectorisingGridClasses.txt
+@@ -4,4 +4,4 @@ ParameterRaster|GRID|Grid|False
+ ParameterSelection|CLASS_ALL|Class Selection|[0] one single class specified by class identifier;[1] all classes|1
+ ParameterNumber|CLASS_ID|Class Identifier|None|None|0
+ ParameterSelection|SPLIT|Vectorised class as...|[0] one single (multi-)polygon object;[1] each island as separated polygon|1
+-OutputVector|POLYGONS|Polygons
++OutputVector|POLYGONS|Vectorized
diff --git a/debian/patches/0001-adding-french-translators.patch b/debian/patches/0001-adding-french-translators.patch
new file mode 100644
index 0000000..c40dc0f
--- /dev/null
+++ b/debian/patches/0001-adding-french-translators.patch
@@ -0,0 +1,21 @@
+From 2e97ceb5c2ecc5c700cfeb42bf5bd822c7c9e91f Mon Sep 17 00:00:00 2001
+From: Werner Macho <werner.macho at gmail.com>
+Date: Mon, 16 Mar 2015 23:03:49 +0100
+Subject: adding french translators
+Origin: https://github.com/qgis/QGIS/commit/2e97ceb5c2ecc5c700cfeb42bf5bd822c7c9e91f
+
+---
+ scripts/tsstat.pl |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/scripts/tsstat.pl
++++ b/scripts/tsstat.pl
+@@ -49,7 +49,7 @@ my $translators= {
+ 	'eu' => 'Asier Sarasua Garmendia, Irantzu Alvarez',
+ 	'fa' => 'Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan',
+ 	'fi' => 'Kari Salovaara, Marko Järvenpää',
+-	'fr' => 'Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu',
++	'fr' => 'Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu, Marie Silvestre, Vincent Picavet',
+ 	'gl' => 'Xan Vieiro',
+ 	'hi' => 'Harish Kumar Solanki',
+ 	'hu' => 'Zoltan Siki',
diff --git a/debian/patches/0001-better-option-text.patch b/debian/patches/0001-better-option-text.patch
new file mode 100644
index 0000000..0f193f3
--- /dev/null
+++ b/debian/patches/0001-better-option-text.patch
@@ -0,0 +1,21 @@
+From 612f57dcd104d110db0547ce25fd8d3586108c6c Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 09:53:39 +0100
+Subject: better option text
+Origin: https://github.com/qgis/QGIS/commit/612f57dcd104d110db0547ce25fd8d3586108c6c
+
+---
+ python/plugins/processing/algs/gdal/rasterize.py |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/gdal/rasterize.py
++++ b/python/plugins/processing/algs/gdal/rasterize.py
+@@ -103,7 +103,7 @@ class rasterize(OgrAlgorithm):
+         self.addParameter(ParameterBoolean(self.TFW,
+             self.tr('Force the generation of an associated ESRI world file (.tfw)'), False))
+         self.addOutput(OutputRaster(self.OUTPUT,
+-            self.tr('Output layer: mandatory if the (*) option is selected')))
++            self.tr('Output layer: mandatory to choose an existing raster layer if the (*) option is selected')))
+ 
+     def processAlgorithm(self, progress):
+         writeOver = self.getParameterValue(self.WRITEOVER)
diff --git a/debian/patches/0001-db-manager-fix-setting-of-contrast-enhancement-for-s.patch b/debian/patches/0001-db-manager-fix-setting-of-contrast-enhancement-for-s.patch
new file mode 100644
index 0000000..4fe7a0b
--- /dev/null
+++ b/debian/patches/0001-db-manager-fix-setting-of-contrast-enhancement-for-s.patch
@@ -0,0 +1,52 @@
+From 8889559366eafcac01223debbac1fde6b86f0879 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Sat, 4 Apr 2015 23:42:49 +0200
+Subject: db manager: fix setting of contrast enhancement for spatialite
+ rasters (fixes #12497)
+Bug: http://hub.qgis.org/issues/12497
+Origin: https://github.com/qgis/QGIS/commit/8889559366eafcac01223debbac1fde6b86f0879
+
+---
+ python/plugins/db_manager/db_plugins/spatialite/plugin.py |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+--- a/python/plugins/db_manager/db_plugins/spatialite/plugin.py
++++ b/python/plugins/db_manager/db_plugins/spatialite/plugin.py
+@@ -33,8 +33,6 @@ try:
+ except ImportError:
+         pass
+ 
+-
+-
+ def classFactory():
+         return SpatiaLiteDBPlugin
+ 
+@@ -86,7 +84,6 @@ class SLDatabase(Database):
+         def connectorsFactory(self, uri):
+                 return SpatiaLiteDBConnector(uri)
+ 
+-
+         def dataTablesFactory(self, row, db, schema=None):
+                 return SLTable(row, db, schema)
+ 
+@@ -96,7 +93,6 @@ class SLDatabase(Database):
+         def rasterTablesFactory(self, row, db, schema=None):
+                 return SLRasterTable(row, db, schema)
+ 
+-
+         def info(self):
+                 from .info_model import SLDatabaseInfo
+                 return SLDatabaseInfo(self)
+@@ -224,10 +220,10 @@ class SLRasterTable(SLTable, RasterTable
+                 return uri
+ 
+         def toMapLayer(self):
+-                from qgis.core import QgsRasterLayer
++                from qgis.core import QgsRasterLayer, QgsContrastEnhancement
+                 rl = QgsRasterLayer(self.gdalUri(), self.name)
+                 if rl.isValid():
+-                        rl.setContrastEnhancementAlgorithm("StretchToMinimumMaximum")
++                        rl.setContrastEnhancement(QgsContrastEnhancement.StretchToMinimumMaximum)
+                 return rl
+ 
+ 
diff --git a/debian/patches/0001-doxygen-add-effects-directory.patch b/debian/patches/0001-doxygen-add-effects-directory.patch
new file mode 100644
index 0000000..7b95ee8
--- /dev/null
+++ b/debian/patches/0001-doxygen-add-effects-directory.patch
@@ -0,0 +1,21 @@
+From 1a827abb66a7f6ee876421a40bf70cd7b7ae0dab Mon Sep 17 00:00:00 2001
+From: Denis Rouzaud <denis.rouzaud at gmail.com>
+Date: Mon, 13 Apr 2015 16:44:13 +0200
+Subject: =?UTF-8?q?doxygen:=20add=20effects=20directory=0A(cherry=20picked=20?=
+ =?UTF-8?q?from=20commit=20d660acbfa365ac52164916b798c8c0167a1f655d)?=
+Origin: https://github.com/qgis/QGIS/commit/1a827abb66a7f6ee876421a40bf70cd7b7ae0dab
+
+---
+ cmake_templates/Doxyfile.in |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/cmake_templates/Doxyfile.in
++++ b/cmake_templates/Doxyfile.in
+@@ -575,6 +575,7 @@ INPUT                  = @CMAKE_SOURCE_D
+                          @CMAKE_SOURCE_DIR@/src/core/composer \
+                          @CMAKE_SOURCE_DIR@/src/core/diagram \
+                          @CMAKE_SOURCE_DIR@/src/core/dxf \
++                         @CMAKE_SOURCE_DIR@/src/core/effects \
+                          @CMAKE_SOURCE_DIR@/src/core/gps \
+                          @CMAKE_SOURCE_DIR@/src/core/layertree \
+                          @CMAKE_SOURCE_DIR@/src/core/pal \
diff --git a/debian/patches/0001-dxf-export-2.patch b/debian/patches/0001-dxf-export-2.patch
new file mode 100644
index 0000000..021a66a
--- /dev/null
+++ b/debian/patches/0001-dxf-export-2.patch
@@ -0,0 +1,176 @@
+From 941f045e6f40fe9a2dc044006c2f34b85e932e9f Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 27 Mar 2015 23:47:17 +0100
+Subject: =?UTF-8?q?dxf=20export:=0A*=20reinstate=20palette=20colors,=20but=20?=
+ =?UTF-8?q?exclude=20black/white=0A*=20fix=20hatch=20transparency=0A*=20fix=20?=
+ =?UTF-8?q?active=20(initial)=20v(iew)port?=
+Origin: https://github.com/qgis/QGIS/commit/941f045e6f40fe9a2dc044006c2f34b85e932e9f
+
+(cherry-picked b6a4194 and 9961095)
+---
+ src/core/dxf/qgsdxfexport.cpp |   89 ++++++++++++++++++-----------------------
+ 1 file changed, 39 insertions(+), 50 deletions(-)
+
+--- a/src/core/dxf/qgsdxfexport.cpp
++++ b/src/core/dxf/qgsdxfexport.cpp
+@@ -418,7 +418,6 @@ void QgsDxfExport::writeGroup( int code,
+ 
+ void QgsDxfExport::writeGroup( QColor color, int exactMatchCode, int rgbCode, int transparencyCode )
+ {
+-#if 0
+   int minDistAt = -1;
+   int minDist = INT_MAX;
+ 
+@@ -432,13 +431,12 @@ void QgsDxfExport::writeGroup( QColor co
+     minDist = dist;
+   }
+ 
+-  writeGroup( exactMatchCode, minDistAt );
+-  if ( minDist == 0 && color.alpha() == 255 )
++  if ( minDist == 0 && color.alpha() == 255 && minDistAt != 7 )
+   {
+-    // exact full opaque match
++    // exact full opaque match, not black/white
++    writeGroup( exactMatchCode, minDistAt );
+     return;
+   }
+-#endif
+ 
+   int c = ( color.red() & 0xff ) * 0x10000 + ( color.green() & 0xff ) * 0x100 + ( color.blue() & 0xff );
+   writeGroup( rgbCode, c );
+@@ -482,10 +480,8 @@ int QgsDxfExport::writeToFile( QIODevice
+   }
+ 
+   mTextStream.setDevice( d );
+-  QgsDebugMsg( "encoding:" + encoding );
+   mTextStream.setCodec( encoding.toLocal8Bit() );
+ 
+-  QgsDebugMsg( "dxfEncoding:" + dxfEncoding( encoding ) );
+   writeHeader( dxfEncoding( encoding ) );
+   writeTables();
+   writeBlocks();
+@@ -506,7 +502,7 @@ void QgsDxfExport::writeHeader( QString
+   writeGroup( 9, "$ACADVER" );
+   writeGroup( 1, "AC1015" );
+ 
+-  QgsRectangle ext = dxfExtent();
++  QgsRectangle ext( mExtent.isEmpty() ? dxfExtent() : mExtent );
+   if ( !ext.isEmpty() )
+   {
+     // EXTMIN
+@@ -666,8 +662,7 @@ void QgsDxfExport::writeTables()
+   writeHandle();
+   writeGroup( 100, "AcDbSymbolTable" );
+ 
+-#if 0
+-  QgsRectangle ext( dxfExtent() );
++  QgsRectangle ext( mExtent.isEmpty() ? dxfExtent() : mExtent );
+ 
+   writeGroup( 0, "VPORT" );
+   writeHandle();
+@@ -675,37 +670,36 @@ void QgsDxfExport::writeTables()
+   writeGroup( 100, "AcDbViewportTableRecord" );
+   writeGroup( 2, "*ACTIVE" );
+   writeGroup( 70, 0 );  // flags
+-  writeGroup( 0, QgsPoint( ext.xMinimum(), ext.yMinimum() ) ); // lower-left corner
+-  writeGroup( 1, QgsPoint( ext.xMaximum(), ext.yMaximum() ) ); // upper right corner
+-  writeGroup( 2, ext.center() );                       // view center point
+-  writeGroup( 3, QgsPoint( 0.0, 0.0 ) );               // snap base point
+-  writeGroup( 4, QgsPoint( 0.5, 0.5 ) );               // snap spacing x/y
+-  writeGroup( 5, QgsPoint( 0.5, 0.5 ) );               // grid spacing x/y
+-  writeGroup( 6, QgsPoint( 0.0, 0.0 ), 1.0, false );   // view direction from target point
+-  writeGroup( 7, QgsPoint( 0.0, 0.0 ), 0.0, false );   // view target point
+-  writeGroup( 40, 10.0 );                          // ?
+-  writeGroup( 42, 50.0 );                              // lens length
+-  writeGroup( 43, 0.0 );                               // front clipping plan
+-  writeGroup( 44, 0.0 );                               // back clipping plan
+-  writeGroup( 50, 0.0 );                               // snap rotation angle
+-  writeGroup( 51, 0.0 );                               // view twist angle
+-  writeGroup( 71, 0 );                                 // view mode
+-  writeGroup( 72, 1000 );                              // circle sides
+-  writeGroup( 73, 1 );                                 // ?
+-  writeGroup( 74, 3 );                                 // UCSICON setting
+-  writeGroup( 75, 0 );                                 // ?
+-  writeGroup( 76, 0 );                                 // ?
+-  writeGroup( 77, 0 );                                 // ?
+-  writeGroup( 78, 0 );                                 // ?
+-  writeGroup( 281, 0 );                                // Render mode (2D)
+-  writeGroup( 100, QgsPoint( 0.0, 0.0 ), 0.0, false ); // UCS origin
+-  writeGroup( 101, QgsPoint( 1.0, 0.0 ), 0.0, false ); // UCS x axis
+-  writeGroup( 102, QgsPoint( 0.0, 1.0 ), 0.0, false ); // UCS y axis
+-  writeGroup( 79, 0 );                                 // Orthographic type of UCS (not orthographic)
+-  writeGroup( 146, 0.0 );                              // elevation
+-  writeGroup( 60, 3 );                                 // ?
+-  writeGroup( 61, 5 );                                 // major grid line
+-#endif
++  writeGroup( 0, QgsPoint( 0.0, 0.0 ), 0.0, true ); // lower left
++  writeGroup( 1, QgsPoint( 1.0, 1.0 ), 0.0, true ); // upper right
++  writeGroup( 2, QgsPoint( 0.0, 0.0 ), 0.0, true ); // view center point
++  writeGroup( 3, QgsPoint( 0.0, 0.0 ), 0.0, true ); // snap base point
++  writeGroup( 4, QgsPoint( 1.0, 1.0 ), 0.0, true ); // snap spacing
++  writeGroup( 5, QgsPoint( 1.0, 1.0 ), 0.0, true ); // grid spacing
++  writeGroup( 6, QgsPoint( 0.0, 0.0 ), 1.0 );       // view direction from target point
++  writeGroup( 7, ext.center(), 0.0, true );         // view target point
++  writeGroup( 40, ext.height() );                   // view height
++  writeGroup( 41, ext.width() / ext.height() );     // view aspect ratio
++  writeGroup( 42, 50.0 );                           // lens length
++  writeGroup( 43, 0.0 );                            // front clipping plane
++  writeGroup( 44, 0.0 );                            // back clipping plane
++  writeGroup( 50, 0.0 );                            // snap rotation
++  writeGroup( 51, 0.0 );                            // view twist angle
++  writeGroup( 71, 0 );                              // view mode (0 = deactivates)
++  writeGroup( 72, 100 );                            // circle zoom percent
++  writeGroup( 73, 1 );                              // fast zoom setting
++  writeGroup( 74, 1 );                              // UCSICON setting
++  writeGroup( 75, 0 );                              // snapping off
++  writeGroup( 76, 0 );                              // grid off
++  writeGroup( 77, 0 );                              // snap style
++  writeGroup( 78, 0 );                              // snap isopair
++  writeGroup( 281, 0 );                             // render mode (0 = 2D optimized)
++  writeGroup( 65, 1 );                              // value of UCSVP for this viewport
++  writeGroup( 100, QgsPoint( 0.0, 0.0 ) );          // UCS origin
++  writeGroup( 101, QgsPoint( 1.0, 0.0 ) );          // UCS x axis
++  writeGroup( 102, QgsPoint( 0.0, 1.0 ) );          // UCS y axis
++  writeGroup( 79, 0 );                              // Orthographic type of UCS (0 = UCS is not orthographic)
++  writeGroup( 146, 0.0 );                           // Elevation
+ 
+   writeGroup( 70, 0 );
+   writeGroup( 0, "ENDTAB" );
+@@ -3369,22 +3363,21 @@ void QgsDxfExport::writePolyline( const
+ 
+ void QgsDxfExport::writePolygon( const QgsPolygon& polygon, const QString& layer, const QString& hatchPattern, QColor color )
+ {
+-  writeGroup( 0, "HATCH" );                     // Entity type
++  writeGroup( 0, "HATCH" );         // Entity type
+   writeHandle();
+   writeGroup( 330, mModelSpaceBR );
+   writeGroup( 100, "AcDbEntity" );
++  writeGroup( 8, layer );           // Layer name
++  writeGroup( color );              // Color
+   writeGroup( 100, "AcDbHatch" );
+ 
+-  writeGroup( 8, layer );   // Layer name
+-  writeGroup( 0, QgsPoint( 0, 0 ) );  // Elevation point (in OCS)
++  writeGroup( 0, QgsPoint( 0, 0 ) ); // Elevation point (in OCS)
+   writeGroup( 200, QgsPoint( 0, 0 ), 1.0 );
+ 
+   writeGroup( 2, hatchPattern );  // Hatch pattern name
+   writeGroup( 70, hatchPattern == "SOLID" ); // Solid fill flag (solid fill = 1; pattern fill = 0)
+   writeGroup( 71, 0 );    // Associativity flag (associative = 1; non-associative = 0)
+ 
+-  writeGroup( color );           // Color (0 by block, 256 by layer)
+-
+   writeGroup( 91, polygon.size() );  // Number of boundary paths (loops)
+   for ( int i = 0; i < polygon.size(); ++i )
+   {
+@@ -3520,10 +3513,6 @@ void QgsDxfExport::writeMText( const QSt
+ 
+   writeGroup( 0, pt );
+ 
+-  QgsDebugMsg( QString( "text:%1" ).arg( text ) );
+-  QgsDebugMsg( QString( "canEncode:%1" ).arg( mTextStream.codec()->canEncode( text ) ? "yes" : "no" ) );
+-  QgsDebugMsg( QString( "fromUnicode:%1" ).arg( mTextStream.codec()->fromUnicode( text ).constData() ) );
+-
+   QString t( text );
+   while ( t.length() > 250 )
+   {
diff --git a/debian/patches/0001-dxf-export-fix-data-defined-outline-color-of-simple-.patch b/debian/patches/0001-dxf-export-fix-data-defined-outline-color-of-simple-.patch
new file mode 100644
index 0000000..ac5e0df
--- /dev/null
+++ b/debian/patches/0001-dxf-export-fix-data-defined-outline-color-of-simple-.patch
@@ -0,0 +1,22 @@
+From f0caf1708e714b6622e3a124471d7a002a712a4c Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Tue, 24 Mar 2015 14:13:56 +0100
+Subject: dxf export: fix data defined outline color of simple markers
+Origin: https://github.com/qgis/QGIS/commit/f0caf1708e714b6622e3a124471d7a002a712a4c
+
+(cherry picked from commit 7469d2bbf038d17a5801b42dcb6e388ca093fe17)
+---
+ src/core/symbology-ng/qgsmarkersymbollayerv2.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp
++++ b/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp
+@@ -884,7 +884,7 @@ bool QgsSimpleMarkerSymbolLayerV2::write
+     bc = QgsSymbolLayerV2Utils::decodeColor( colorExpression->evaluate( *f ).toString() );
+   }
+ 
+-  QgsExpression* outlinecolorExpression = expression( "outline_color" );
++  QgsExpression* outlinecolorExpression = expression( "color_border" );
+   if ( outlinecolorExpression )
+   {
+     pc = QgsSymbolLayerV2Utils::decodeColor( outlinecolorExpression->evaluate( *f ).toString() );
diff --git a/debian/patches/0001-dxf-export.patch b/debian/patches/0001-dxf-export.patch
new file mode 100644
index 0000000..7b6550a
--- /dev/null
+++ b/debian/patches/0001-dxf-export.patch
@@ -0,0 +1,147 @@
+From ae954e8f37a78a5c045d80cf13b2ce7debd73f6d Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 20 Mar 2015 22:22:49 +0100
+Subject: =?UTF-8?q?dxf=20export:=0A*=20switch=20to=20rgb=20colors=20only=20(?=
+ =?UTF-8?q?fixes=20black/white=20issues)=0A*=20fix=20drawing=20of=20polygon=20?=
+ =?UTF-8?q?outlines=0A*=20distiguish=20polygon=20outlines=20from=20filled=20?=
+ =?UTF-8?q?polygons=20in=20paint=20engine=0A=20=20(fixes=20#12368)?=
+Bug: http://hub.qgis.org/issues/12368
+Origin: https://github.com/qgis/QGIS/commit/ae954e8f37a78a5c045d80cf13b2ce7debd73f6d
+
+(cherry picked from commit 25e4e4d3d687d5f32fc6ffe3fb4263448ea1d079)
+---
+ src/core/dxf/qgsdxfexport.cpp      |    4 +++-
+ src/core/dxf/qgsdxfpaintengine.cpp |   36 ++++++++++++++++--------------------
+ src/core/dxf/qgsdxfpaintengine.h   |    1 -
+ 3 files changed, 19 insertions(+), 22 deletions(-)
+
+diff --git a/src/core/dxf/qgsdxfexport.cpp b/src/core/dxf/qgsdxfexport.cpp
+index bfc30eb..37307b7 100644
+--- a/src/core/dxf/qgsdxfexport.cpp
++++ b/src/core/dxf/qgsdxfexport.cpp
+@@ -418,6 +418,7 @@ void QgsDxfExport::writeGroup( int code, const QgsPoint &p, double z, bool skipz
+ 
+ void QgsDxfExport::writeGroup( QColor color, int exactMatchCode, int rgbCode, int transparencyCode )
+ {
++#if 0
+   int minDistAt = -1;
+   int minDist = INT_MAX;
+ 
+@@ -437,6 +438,7 @@ void QgsDxfExport::writeGroup( QColor color, int exactMatchCode, int rgbCode, in
+     // exact full opaque match
+     return;
+   }
++#endif
+ 
+   int c = ( color.red() & 0xff ) * 0x10000 + ( color.green() & 0xff ) * 0x100 + ( color.blue() & 0xff );
+   writeGroup( rgbCode, c );
+@@ -3694,7 +3696,7 @@ void QgsDxfExport::addFeature( const QgsSymbolV2RenderContext& ctx, const QStrin
+       QgsPolygon::const_iterator polyIt = polygon.constBegin();
+       for ( ; polyIt != polygon.constEnd(); ++polyIt ) // iterate over rings
+       {
+-        writePolyline( geom->asPolyline(), layer, lineStyleName, penColor, width, false );
++        writePolyline( *polyIt, layer, lineStyleName, penColor, width, false );
+       }
+ 
+       if ( offsetPolygon != geom )
+diff --git a/src/core/dxf/qgsdxfpaintengine.cpp b/src/core/dxf/qgsdxfpaintengine.cpp
+index 91e7a1f..7edaa5f 100644
+--- a/src/core/dxf/qgsdxfpaintengine.cpp
++++ b/src/core/dxf/qgsdxfpaintengine.cpp
+@@ -84,12 +84,19 @@ void QgsDxfPaintEngine::drawPolygon( const QPointF *points, int pointCount, Poly
+     polyline[i] = toDxfCoordinates( points[i] );
+   }
+ 
+-  mDxf->writePolygon( polygon, mLayer, "SOLID", currentColor() );
++  if ( mode == QPaintEngine::PolylineMode )
++  {
++    mDxf->writePolyline( polyline, mLayer, "CONTINUOUS", mPen.color(), currentWidth(), true );
++  }
++  else
++  {
++    mDxf->writePolygon( polygon, mLayer, "SOLID", mBrush.color() );
++  }
+ }
+ 
+ void QgsDxfPaintEngine::drawRects( const QRectF* rects, int rectCount )
+ {
+-  if ( !mDxf || !mPaintDevice || !rects )
++  if ( !mDxf || !mPaintDevice || !rects || mBrush.style() == Qt::NoBrush )
+   {
+     return;
+   }
+@@ -104,7 +111,7 @@ void QgsDxfPaintEngine::drawRects( const QRectF* rects, int rectCount )
+     QgsPoint pt2 = toDxfCoordinates( QPointF( right, bottom ) );
+     QgsPoint pt3 = toDxfCoordinates( QPointF( left, top ) );
+     QgsPoint pt4 = toDxfCoordinates( QPointF( right, top ) );
+-    mDxf->writeSolid( mLayer, currentColor(), pt1, pt2, pt3, pt4 );
++    mDxf->writeSolid( mLayer, mBrush.color(), pt1, pt2, pt3, pt4 );
+   }
+ }
+ 
+@@ -162,7 +169,10 @@ void QgsDxfPaintEngine::endPolygon()
+ {
+   if ( mCurrentPolygon.size() > 1 )
+   {
+-    drawPolygon( mCurrentPolygon.constData(), mCurrentPolygon.size(), QPaintEngine::OddEvenMode );
++    if ( mPen.style() != Qt::NoPen )
++      drawPolygon( mCurrentPolygon.constData(), mCurrentPolygon.size(), QPaintEngine::PolylineMode );
++    if ( mBrush.style() != Qt::NoBrush )
++      drawPolygon( mCurrentPolygon.constData(), mCurrentPolygon.size(), QPaintEngine::OddEvenMode );
+   }
+   mCurrentPolygon.clear();
+ }
+@@ -198,7 +208,7 @@ void QgsDxfPaintEngine::endCurve()
+ 
+ void QgsDxfPaintEngine::drawLines( const QLineF* lines, int lineCount )
+ {
+-  if ( !mDxf || !mPaintDevice || !lines )
++  if ( !mDxf || !mPaintDevice || !lines || mPen.style() == Qt::NoPen )
+   {
+     return;
+   }
+@@ -207,7 +217,7 @@ void QgsDxfPaintEngine::drawLines( const QLineF* lines, int lineCount )
+   {
+     QgsPoint pt1 = toDxfCoordinates( lines[i].p1() );
+     QgsPoint pt2 = toDxfCoordinates( lines[i].p2() );
+-    mDxf->writeLine( pt1, pt2, mLayer, "CONTINUOUS", currentColor(), currentWidth() );
++    mDxf->writeLine( pt1, pt2, mLayer, "CONTINUOUS", mPen.color(), currentWidth() );
+   }
+ }
+ 
+@@ -222,20 +232,6 @@ QgsPoint QgsDxfPaintEngine::toDxfCoordinates( const QPointF& pt ) const
+   return QgsPoint( dxfPt.x(), dxfPt.y() );
+ }
+ 
+-QColor QgsDxfPaintEngine::currentColor() const
+-{
+-  if ( !mDxf )
+-  {
+-    return QColor();
+-  }
+-
+-  QColor c = mPen.color();
+-  if ( mPen.style() == Qt::NoPen )
+-  {
+-    c = mBrush.color();
+-  }
+-  return c;
+-}
+ 
+ double QgsDxfPaintEngine::currentWidth() const
+ {
+diff --git a/src/core/dxf/qgsdxfpaintengine.h b/src/core/dxf/qgsdxfpaintengine.h
+index 0497458..a799005 100644
+--- a/src/core/dxf/qgsdxfpaintengine.h
++++ b/src/core/dxf/qgsdxfpaintengine.h
+@@ -61,7 +61,6 @@ class CORE_EXPORT QgsDxfPaintEngine: public QPaintEngine
+     QList<QPointF> mCurrentCurve;
+ 
+     QgsPoint toDxfCoordinates( const QPointF& pt ) const;
+-    QColor currentColor() const;
+     double currentWidth() const;
+ 
+     void moveTo( double dx, double dy );
+-- 
+1.7.10.4
+
diff --git a/debian/patches/0001-expressions-fix-modulo-0-crashes-fixes-12431.patch b/debian/patches/0001-expressions-fix-modulo-0-crashes-fixes-12431.patch
new file mode 100644
index 0000000..4022aac
--- /dev/null
+++ b/debian/patches/0001-expressions-fix-modulo-0-crashes-fixes-12431.patch
@@ -0,0 +1,42 @@
+From 2e0cba561d67593e7c54eacac89955fc3d9c3f00 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Mon, 23 Mar 2015 20:07:13 +0100
+Subject: expressions: fix modulo 0 crashes (fixes #12431)
+Origin: https://github.com/qgis/QGIS/commit/2e0cba561d67593e7c54eacac89955fc3d9c3f00
+
+(cherry picked from commit 9596f97db605421eabe6643a10f25db8a7747df9)
+---
+ src/core/qgsexpression.cpp |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/src/core/qgsexpression.cpp
++++ b/src/core/qgsexpression.cpp
+@@ -2252,6 +2252,10 @@ QVariant QgsExpression::NodeBinaryOperat
+         // both are integers - let's use integer arithmetics
+         int iL = getIntValue( vL, parent ); ENSURE_NO_EVAL_ERROR;
+         int iR = getIntValue( vR, parent ); ENSURE_NO_EVAL_ERROR;
++
++        if ( mOp == boMod && iR == 0 )
++          return QVariant();
++
+         return QVariant( computeInt( iL, iR ) );
+       }
+       else if ( isDateTimeSafe( vL ) && isIntervalSafe( vR ) )
+@@ -2270,7 +2274,7 @@ QVariant QgsExpression::NodeBinaryOperat
+         // general floating point arithmetic
+         double fL = getDoubleValue( vL, parent ); ENSURE_NO_EVAL_ERROR;
+         double fR = getDoubleValue( vR, parent ); ENSURE_NO_EVAL_ERROR;
+-        if ( mOp == boDiv && fR == 0 )
++        if (( mOp == boDiv || mOp == boMod ) && fR == 0. )
+           return QVariant(); // silently handle division by zero and return NULL
+         return QVariant( computeDouble( fL, fR ) );
+       }
+@@ -2280,7 +2284,7 @@ QVariant QgsExpression::NodeBinaryOperat
+       //integer division
+       double fL = getDoubleValue( vL, parent ); ENSURE_NO_EVAL_ERROR;
+       double fR = getDoubleValue( vR, parent ); ENSURE_NO_EVAL_ERROR;
+-      if ( fR == 0 )
++      if ( fR == 0. )
+         return QVariant(); // silently handle division by zero and return NULL
+       return QVariant( qFloor( fL / fR ) );
+     }
diff --git a/debian/patches/0001-fix-GRASS7-v.generalize.patch b/debian/patches/0001-fix-GRASS7-v.generalize.patch
new file mode 100644
index 0000000..6531e30
--- /dev/null
+++ b/debian/patches/0001-fix-GRASS7-v.generalize.patch
@@ -0,0 +1,21 @@
+From 52b52e1e34748ec4d59afa10ff4bd8e36944551b Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Tue, 14 Apr 2015 12:24:26 +0100
+Subject: fix GRASS7 v.generalize
+Origin: https://github.com/qgis/QGIS/commit/52b52e1e34748ec4d59afa10ff4bd8e36944551b
+
+---
+ python/plugins/processing/algs/grass7/description/v.generalize.txt |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/grass7/description/v.generalize.txt
++++ b/python/plugins/processing/algs/grass7/description/v.generalize.txt
+@@ -14,6 +14,7 @@ ParameterNumber|betweeness_thresh|Betwee
+ ParameterNumber|alpha|Snakes alpha parameter|None|None|1.0
+ ParameterNumber|beta|Snakes beta parameter|None|None|1.0
+ ParameterNumber|iterations|Number of iterations|None|None|1
+-ParameterBoolean|-c|Copy attributes|True
++ParameterBoolean|-t|Do not copy attributes|False
++ParameterBoolean|-l|Disable loop support|True
+ OutputVector|output|Output layer
+ 
diff --git a/debian/patches/0001-fix-SAGA-contour-lines-from-grid.patch b/debian/patches/0001-fix-SAGA-contour-lines-from-grid.patch
new file mode 100644
index 0000000..865b822
--- /dev/null
+++ b/debian/patches/0001-fix-SAGA-contour-lines-from-grid.patch
@@ -0,0 +1,20 @@
+From 6c47c6cdda844cda30e5179cb2ca44cd6b711e28 Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 10:46:28 +0100
+Subject: fix SAGA contour lines from grid
+Origin: https://github.com/qgis/QGIS/commit/6c47c6cdda844cda30e5179cb2ca44cd6b711e28
+
+---
+ .../processing/algs/saga/description/2.1.3/ContourLinesfromGrid.txt  |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/ContourLinesfromGrid.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/ContourLinesfromGrid.txt
+@@ -1,6 +1,6 @@
+ Contour Lines from Grid
+ shapes_grid
+-ParameterRaster|INPUT|Grid|False
++ParameterRaster|GRID|Grid|False
+ ParameterNumber|ZMIN|Minimum Contour Value|None|None|0.0
+ ParameterNumber|ZMAX|Maximum Contour Value|None|None|10000.0
+ ParameterNumber|ZSTEP|Equidistance|None|None|100.0
diff --git a/debian/patches/0001-fix-gdal-rasterize-when-using-an-existing-raster-lay.patch b/debian/patches/0001-fix-gdal-rasterize-when-using-an-existing-raster-lay.patch
new file mode 100644
index 0000000..07fd1c6
--- /dev/null
+++ b/debian/patches/0001-fix-gdal-rasterize-when-using-an-existing-raster-lay.patch
@@ -0,0 +1,59 @@
+From 02bec584a897167a767198637c77b83898ccd36a Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 09:52:11 +0100
+Subject: fix gdal rasterize when using an existing raster layer
+Origin: https://github.com/qgis/QGIS/commit/02bec584a897167a767198637c77b83898ccd36a
+
+---
+ python/plugins/processing/algs/gdal/rasterize.py |   32 ++++++++++++----------
+ 1 file changed, 17 insertions(+), 15 deletions(-)
+
+--- a/python/plugins/processing/algs/gdal/rasterize.py
++++ b/python/plugins/processing/algs/gdal/rasterize.py
+@@ -101,9 +101,9 @@ class rasterize(OgrAlgorithm):
+         self.addParameter(ParameterSelection(self.BIGTIFF,
+             self.tr('Control whether the created file is a BigTIFF or a classic TIFF'), self.BIGTIFFTYPE, 0))
+         self.addParameter(ParameterBoolean(self.TFW,
+-            self.tr('Force the generation of an associated ESRI world file (.tfw))'), False))
++            self.tr('Force the generation of an associated ESRI world file (.tfw)'), False))
+         self.addOutput(OutputRaster(self.OUTPUT,
+-            self.tr('Output layer: mandatory to choose an existing raster layer if the (*) option is selected')))
++            self.tr('Output layer: mandatory if the (*) option is selected')))
+ 
+     def processAlgorithm(self, progress):
+         writeOver = self.getParameterValue(self.WRITEOVER)
+@@ -127,19 +127,21 @@ class rasterize(OgrAlgorithm):
+              arguments.append('-ot')
+              arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
+         dimType = self.getParameterValue(self.DIMENSIONS)
+-        if dimType == 0:
+-            # size in pixels
+-            arguments.append('-ts')
+-            arguments.append(str(self.getParameterValue(self.WIDTH)))
+-            arguments.append(str(self.getParameterValue(self.HEIGHT)))
+-        else:
+-             # resolution in map units per pixel
+-             arguments.append('-tr')
+-             arguments.append(str(self.getParameterValue(self.WIDTH)))
+-             arguments.append(str(self.getParameterValue(self.HEIGHT)))
+-        if len(noData) > 0:
+-            arguments.append('-a_nodata')
+-            arguments.append(noData)
++        if not writeOver:
++           if dimType == 0:
++               # size in pixels
++               arguments.append('-ts')
++               arguments.append(str(self.getParameterValue(self.WIDTH)))
++               arguments.append(str(self.getParameterValue(self.HEIGHT)))
++           else:
++               # resolution in map units per pixel
++               arguments.append('-tr')
++               arguments.append(str(self.getParameterValue(self.WIDTH)))
++               arguments.append(str(self.getParameterValue(self.HEIGHT)))
++        if not writeOver:
++           if len(noData) > 0:
++              arguments.append('-a_nodata')
++              arguments.append(noData)
+         if (GdalUtils.getFormatShortNameFromFilename(out) == "GTiff") and (writeOver is False):
+             arguments.append("-co COMPRESS="+compress)
+             if compress == 'JPEG':
diff --git a/debian/patches/0001-fix-gdal_rasterize-remove-duplicate-options.patch b/debian/patches/0001-fix-gdal_rasterize-remove-duplicate-options.patch
new file mode 100644
index 0000000..0610807
--- /dev/null
+++ b/debian/patches/0001-fix-gdal_rasterize-remove-duplicate-options.patch
@@ -0,0 +1,87 @@
+From 4802bd609ef3c4629f98c2a66efd863865124e4b Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Fri, 10 Apr 2015 18:03:55 +0100
+Subject: fix gdal_rasterize: remove duplicate options
+Origin: https://github.com/qgis/QGIS/commit/4802bd609ef3c4629f98c2a66efd863865124e4b
+
+---
+ python/plugins/processing/algs/gdal/rasterize.py |   45 ++++++++++------------
+ 1 file changed, 20 insertions(+), 25 deletions(-)
+
+--- a/python/plugins/processing/algs/gdal/rasterize.py
++++ b/python/plugins/processing/algs/gdal/rasterize.py
+@@ -47,7 +47,6 @@ class rasterize(OgrAlgorithm):
+     DIMENSIONS = 'DIMENSIONS'
+     WIDTH = 'WIDTH'
+     HEIGHT = 'HEIGHT'
+-    WRITEOVER = 'WRITEOVER'
+     RTYPE = 'RTYPE'
+     OUTPUT = 'OUTPUT'
+     TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64']
+@@ -71,8 +70,6 @@ class rasterize(OgrAlgorithm):
+         self.addParameter(ParameterVector(self.INPUT, self.tr('Input layer')))
+         self.addParameter(ParameterTableField(self.FIELD,
+             self.tr('Attribute field'), self.INPUT))
+-        self.addParameter(ParameterBoolean(self.WRITEOVER,
+-            self.tr('Write values inside an existing raster layer(*)'), False))
+         self.addParameter(ParameterSelection(self.DIMENSIONS,
+             self.tr('Set output raster size (ignored if above option is checked)'),
+             ['Output size in pixels', 'Output resolution in map units per pixel'], 1))
+@@ -103,10 +100,9 @@ class rasterize(OgrAlgorithm):
+         self.addParameter(ParameterBoolean(self.TFW,
+             self.tr('Force the generation of an associated ESRI world file (.tfw)'), False))
+         self.addOutput(OutputRaster(self.OUTPUT,
+-            self.tr('Output layer: mandatory to choose an existing raster layer if the (*) option is selected')))
++            self.tr('Rasterized')))
+ 
+     def processAlgorithm(self, progress):
+-        writeOver = self.getParameterValue(self.WRITEOVER)
+         inLayer = self.getParameterValue(self.INPUT)
+         ogrLayer = self.ogrConnectionString(inLayer)[1:-1]
+         noData = str(self.getParameterValue(self.NO_DATA))
+@@ -123,27 +119,26 @@ class rasterize(OgrAlgorithm):
+         arguments.append('-a')
+         arguments.append(str(self.getParameterValue(self.FIELD)))
+ 
+-        if not writeOver:
+-             arguments.append('-ot')
+-             arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
++
++        arguments.append('-ot')
++        arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
+         dimType = self.getParameterValue(self.DIMENSIONS)
+-        if not writeOver:
+-           if dimType == 0:
+-               # size in pixels
+-               arguments.append('-ts')
+-               arguments.append(str(self.getParameterValue(self.WIDTH)))
+-               arguments.append(str(self.getParameterValue(self.HEIGHT)))
+-           else:
+-               # resolution in map units per pixel
+-               arguments.append('-tr')
+-               arguments.append(str(self.getParameterValue(self.WIDTH)))
+-               arguments.append(str(self.getParameterValue(self.HEIGHT)))
+-
+-           if len(noData) > 0:
+-              arguments.append('-a_nodata')
+-              arguments.append(noData)
++        if dimType == 0:
++           # size in pixels
++           arguments.append('-ts')
++           arguments.append(str(self.getParameterValue(self.WIDTH)))
++           arguments.append(str(self.getParameterValue(self.HEIGHT)))
++        else:
++           # resolution in map units per pixel
++           arguments.append('-tr')
++           arguments.append(str(self.getParameterValue(self.WIDTH)))
++           arguments.append(str(self.getParameterValue(self.HEIGHT)))
++
++        if len(noData) > 0:
++           arguments.append('-a_nodata')
++           arguments.append(noData)
+ 
+-        if (GdalUtils.getFormatShortNameFromFilename(out) == "GTiff") and (writeOver is False):
++        if (GdalUtils.getFormatShortNameFromFilename(out) == "GTiff"):
+             arguments.append("-co COMPRESS="+compress)
+             if compress == 'JPEG':
+                arguments.append("-co JPEG_QUALITY="+jpegcompression)
diff --git a/debian/patches/0001-fix-saga-catchment-area-modules.patch b/debian/patches/0001-fix-saga-catchment-area-modules.patch
new file mode 100644
index 0000000..a8a926f
--- /dev/null
+++ b/debian/patches/0001-fix-saga-catchment-area-modules.patch
@@ -0,0 +1,60 @@
+From 872a89fe827e67d8c9e84dda250fdf3f6575b980 Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 11:55:17 +0100
+Subject: fix saga catchment area modules
+Origin: https://github.com/qgis/QGIS/commit/872a89fe827e67d8c9e84dda250fdf3f6575b980
+
+---
+ .../algs/saga/description/2.1.3/CatchmentArea(FlowTracing).txt   |    6 +++---
+ .../algs/saga/description/2.1.3/CatchmentArea(Parallel).txt      |    2 +-
+ .../algs/saga/description/2.1.3/CatchmentArea(Recursive).txt     |    4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(FlowTracing).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(FlowTracing).txt
+@@ -4,14 +4,14 @@ ParameterRaster|ELEVATION|Elevation|Fals
+ ParameterRaster|SINKROUTE|Sink Routes|True
+ ParameterRaster|WEIGHT|Weight|True
+ ParameterRaster|MATERIAL|Material|True
++ParameterRaster|VAL_INPUT|nput for Mean over Catchment Calculation|True
+ ParameterRaster|TARGET|Target|True
+ ParameterNumber|STEP|Step|None|None|1
+ ParameterSelection|METHOD|Method|[0] Rho 8;[1] Kinematic Routing Algorithm;[2] DEMON
+ ParameterNumber|MINDQV|DEMON - Min. DQV|None|None|0.0
+-ParameterBoolean|CORRECT         |Flow Correction|True
++ParameterBoolean|CORRECT|Flow Correction|True
+ OutputRaster|CAREA|Catchment Area
+-OutputRaster|CHEIGHT|Catchment Height
+-OutputRaster|CSLOPE|Catchment Slope
++OutputRaster|VAL_MEAN|Mean over Catchment
+ OutputRaster|ACCU_TOT|Total accumulated Material
+ OutputRaster|ACCU_LEFT|Accumulated Material from _left_ side
+ OutputRaster|ACCU_RIGHT|Accumulated Material from _right_ side
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Parallel).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Parallel).txt
+@@ -2,4 +2,4 @@ Catchment Area|Catchment Area (Parallel)
+ ta_hydrology
+ ParameterRaster|ELEVATION|Elevation|False
+ ParameterSelection|METHOD|Method|[0] Deterministic 8;[1] Rho 8;[2] Braunschweiger Reliefmodell;[3] Deterministic Infinity;[4] Multiple Flow Direction;[5] Multiple Triangular Flow Directon
+-OutputRaster|CAREA|Catchment Area
++OutputRaster|CAREA|Catchment Area
+\ No newline at end of file
+--- a/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Recursive).txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/CatchmentArea(Recursive).txt
+@@ -4,14 +4,14 @@ ParameterRaster|ELEVATION|Elevation|Fals
+ ParameterRaster|SINKROUTE|Sink Routes|True
+ ParameterRaster|WEIGHT|Weight|True
+ ParameterRaster|MATERIAL|Material|True
++ParameterRaster|VAL_INPUT|nput for Mean over Catchment Calculation|True
+ ParameterRaster|TARGET|Target|True
+ ParameterNumber|STEP|Step|None|None|1
+ ParameterRaster|TARGETS|Target Areas|True
+ ParameterSelection|METHOD|Method|[0] Deterministic 8;[1] Rho 8;[2] Deterministic Infinity;[3] Multiple Flow Direction
+ ParameterNumber|CONVERGENCE|Convergence|None|None|1.1
+ OutputRaster|CAREA|Catchment Area
+-OutputRaster|CHEIGHT|Catchment Height
+-OutputRaster|CSLOPE|Catchment Slope
++OutputRaster|VAL_MEAN|Mean over Catchment
+ OutputRaster|ACCU_TOT|Total accumulated Material
+ OutputRaster|ACCU_LEFT|Accumulated Material from _left_ side
+ OutputRaster|ACCU_RIGHT|Accumulated Material from _right_ side
diff --git a/debian/patches/0001-fix-saga-interpolations-modules.patch b/debian/patches/0001-fix-saga-interpolations-modules.patch
new file mode 100644
index 0000000..3b942d2
--- /dev/null
+++ b/debian/patches/0001-fix-saga-interpolations-modules.patch
@@ -0,0 +1,75 @@
+From a2258c556578081d062e5991e7efe31ca621f022 Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 12:41:49 +0100
+Subject: fix saga interpolations modules
+Origin: https://github.com/qgis/QGIS/commit/a2258c556578081d062e5991e7efe31ca621f022
+
+---
+ .../algs/saga/description/2.1.3/InverseDistanceWeighted.txt  |   10 +++++-----
+ .../description/2.1.3/MultilevelB-SplineInterpolation.txt    |    8 +++++---
+ .../algs/saga/description/2.1.3/StatisticsforGrids.txt       |    6 +++++-
+ 3 files changed, 15 insertions(+), 9 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/InverseDistanceWeighted.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/InverseDistanceWeighted.txt
+@@ -2,15 +2,15 @@ Inverse Distance Weighted
+ grid_gridding
+ ParameterVector|SHAPES|Points|0|False
+ ParameterTableField|FIELD|Attribute|SHAPES|-1|False
+-Hardcoded|-TARGET_DEFINITION 0
++ParameterRaster|TARGET_TEMPLATE|Target System|True
+ ParameterSelection|WEIGHTING|Distance Weighting|[0] inverse distance to a power;[1] linearly decreasing within search radius;[2] exponential weighting scheme;[3] gaussian weighting scheme
+ ParameterNumber|WEIGHT_POWER|Inverse Distance Power|0.0|None|2
+ ParameterNumber|WEIGHT_BANDWIDTH|Exponential and Gaussian Weighting Bandwidth|0.0|None|1
+ ParameterSelection|SEARCH_RANGE|Search Range|[0] search radius (local);[1] no search radius (global)
+ ParameterNumber|SEARCH_RADIUS|Search Radius|None|None|100.0
+ ParameterSelection|SEARCH_DIRECTION|Search Mode|[0] all directions;[1] quadrants
+-ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points
+-ParameterNumber|SEARCH_POINTS_MAX|Maximum Number of Points|None|None|10
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+-ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
+\ No newline at end of file
++ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
++ParameterSelection|TARGET_DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system
++ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells
++OutputRaster|TARGET_OUT_GRID|Grid
+\ No newline at end of file
+--- a/python/plugins/processing/algs/saga/description/2.1.3/MultilevelB-SplineInterpolation.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/MultilevelB-SplineInterpolation.txt
+@@ -2,10 +2,12 @@ Multilevel B-Spline Interpolation
+ grid_spline
+ ParameterVector|SHAPES|Points|0|False
+ ParameterTableField|FIELD|Attribute|SHAPES|-1|False
+-Hardcoded|-TARGET_DEFINITION 0
++ParameterRaster|TARGET_TEMPLATE|Target System|True
+ ParameterSelection|METHOD|Method|[0] without B-spline refinement;[1] with B-spline refinement
+ ParameterNumber|EPSILON|Threshold Error|None|None|0.0001
+-ParameterNumber|LEVEL_MAX|Maximum Level|None|None|11.0
++ParameterBoolean|UPDATE|Update View|False
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|TARGET_OUT_GRID|Grid
++ParameterSelection|TARGET_DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system
++ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells
++OutputRaster|TARGET_OUT_GRID|Grid
+\ No newline at end of file
+--- a/python/plugins/processing/algs/saga/description/2.1.3/StatisticsforGrids.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/StatisticsforGrids.txt
+@@ -1,10 +1,14 @@
+ Statistics for Grids
+ statistics_grid
+ ParameterMultipleInput|GRIDS|Grids|3|False
++ParameterNumber|PCTL_VAL|Percentile|0.0|100.0|50.0
+ OutputRaster|MEAN|Arithmetic Mean
+ OutputRaster|MIN|Minimum
+ OutputRaster|MAX|Maximum
+ OutputRaster|VAR|Variance
++OutputRaster|SUM|Sum
++OutputRaster|RANGE|Range
++OutputRaster|PCTL|Percentile
+ OutputRaster|STDDEV|Standard Deviation
+ OutputRaster|STDDEVLO|Mean less Standard Deviation
+-OutputRaster|STDDEVHI|Mean plus Standard Deviation
++OutputRaster|STDDEVHI|Mean plus Standard Devia
+\ No newline at end of file
diff --git a/debian/patches/0001-fix-saga-shapes-to-grid.patch b/debian/patches/0001-fix-saga-shapes-to-grid.patch
new file mode 100644
index 0000000..d68fe03
--- /dev/null
+++ b/debian/patches/0001-fix-saga-shapes-to-grid.patch
@@ -0,0 +1,33 @@
+From 3987ea2118d99c0cc97317259358bdc621bf4b9d Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 11:24:32 +0100
+Subject: fix saga shapes to grid
+Origin: https://github.com/qgis/QGIS/commit/3987ea2118d99c0cc97317259358bdc621bf4b9d
+
+---
+ .../processing/algs/saga/description/2.1.3/ShapestoGrid.txt  |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/ShapestoGrid.txt
+@@ -1,11 +1,15 @@
+ Shapes to Grid
+ grid_gridding
+-Hardcoded|-TARGET 0
+ ParameterVector|INPUT|Shapes|-1|False
+ ParameterTableField|FIELD|Attribute|INPUT|-1|False
++ParameterSelection|OUTPUT|Output Values|[0] data / no-data;[1] index number; [2] attribute
+ ParameterSelection|MULTIPLE|Method for Multiple Values|[0] first;[1] last;[2] minimum;[3] maximum;[4] mean
+ ParameterSelection|LINE_TYPE|Method for Lines|[0] thin;[1] thick
++ParameterSelection|POLY_TYPE|Polygon|[0] node;[1] cell
+ ParameterSelection|GRID_TYPE|Preferred Target Grid Type|[0] Integer (1 byte);[1] Integer (2 byte);[2] Integer (4 byte);[3] Floating Point (4 byte);[4] Floating Point (8 byte)
++ParameterSelection|TARGET_DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system
+ Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+-ParameterNumber|USER_SIZE|Cellsize|None|None|100.0
+-OutputRaster|USER_GRID|Grid
+\ No newline at end of file
++ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
++ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells
++OutputRaster|TARGET_OUT_GRID|Target Grid
++OutputRaster|TARGET_COUNT|Number of Values
+\ No newline at end of file
diff --git a/debian/patches/0001-fix-typo.patch b/debian/patches/0001-fix-typo.patch
new file mode 100644
index 0000000..aa4aef1
--- /dev/null
+++ b/debian/patches/0001-fix-typo.patch
@@ -0,0 +1,20 @@
+From 8c0b0e52addae3ccd2c79f53bb2ffdcd9b1a60a9 Mon Sep 17 00:00:00 2001
+From: Giovanni Manghi <giovanni.manghi at faunalia.pt>
+Date: Thu, 9 Apr 2015 12:44:19 +0100
+Subject: fix typo
+Origin: https://github.com/qgis/QGIS/commit/8c0b0e52addae3ccd2c79f53bb2ffdcd9b1a60a9
+
+---
+ .../processing/algs/saga/description/2.1.3/StatisticsforGrids.txt    |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/saga/description/2.1.3/StatisticsforGrids.txt
++++ b/python/plugins/processing/algs/saga/description/2.1.3/StatisticsforGrids.txt
+@@ -11,4 +11,4 @@ OutputRaster|RANGE|Range
+ OutputRaster|PCTL|Percentile
+ OutputRaster|STDDEV|Standard Deviation
+ OutputRaster|STDDEVLO|Mean less Standard Deviation
+-OutputRaster|STDDEVHI|Mean plus Standard Devia
+\ No newline at end of file
++OutputRaster|STDDEVHI|Mean plus Standard Deviation
+\ No newline at end of file
diff --git a/debian/patches/0001-fix-where-clause-when-multiple-features-are-filtered.patch b/debian/patches/0001-fix-where-clause-when-multiple-features-are-filtered.patch
new file mode 100644
index 0000000..c140148
--- /dev/null
+++ b/debian/patches/0001-fix-where-clause-when-multiple-features-are-filtered.patch
@@ -0,0 +1,79 @@
+From 9e0893f67d318a8a6f0d3bc637130164542c9ad1 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Tue, 21 Apr 2015 22:38:15 +0200
+Subject: fix where clause when multiple features are filtered by ids (fixes
+ #12616, followup d1e23a6)
+Bug: http://hub.qgis.org/issues/12616
+Origin: https://github.com/qgis/QGIS/commit/9e0893f67d318a8a6f0d3bc637130164542c9ad1
+
+(cherry picked from commit 02f5c73ae2067c3a92a2254761a8e2db0a565eae)
+---
+ src/providers/oracle/qgsoracleprovider.cpp              |    2 +-
+ src/providers/postgres/qgspostgresprovider.cpp          |    2 +-
+ .../spatialite/qgsspatialitefeatureiterator.cpp         |   15 +++++++++++++++
+ src/providers/spatialite/qgsspatialitefeatureiterator.h |    1 +
+ 4 files changed, 18 insertions(+), 2 deletions(-)
+
+--- a/src/providers/oracle/qgsoracleprovider.cpp
++++ b/src/providers/oracle/qgsoracleprovider.cpp
+@@ -461,7 +461,7 @@ QString QgsOracleUtils::whereClause( Qgs
+   {
+     whereClauses << whereClause( featureId, fields, primaryKeyType, primaryKeyAttrs, sharedData );
+   }
+-  return whereClauses.join( " AND " );
++  return whereClauses.isEmpty() ? "" : whereClauses.join( " OR " ).prepend( "(" ).append( ")" );
+ }
+ 
+ 
+--- a/src/providers/postgres/qgspostgresprovider.cpp
++++ b/src/providers/postgres/qgspostgresprovider.cpp
+@@ -545,7 +545,7 @@ QString QgsPostgresUtils::whereClause( Q
+     whereClauses << whereClause( featureId, fields, conn, pkType, pkAttrs, sharedData );
+   }
+ 
+-  return whereClauses.join( " OR " );
++  return whereClauses.isEmpty() ? "" : whereClauses.join( " OR " ).prepend( "(" ).append( ")" );
+ }
+ 
+ QString QgsPostgresProvider::filterWhereClause() const
+--- a/src/providers/spatialite/qgsspatialitefeatureiterator.cpp
++++ b/src/providers/spatialite/qgsspatialitefeatureiterator.cpp
+@@ -44,6 +44,11 @@ QgsSpatiaLiteFeatureIterator::QgsSpatiaL
+     whereClause += whereClauseFid();
+   }
+ 
++  if ( request.filterType() == QgsFeatureRequest::FilterFids )
++  {
++    whereClause += whereClauseFids();
++  }
++
+   if ( !mSource->mSubsetString.isEmpty() )
+   {
+     if ( !whereClause.isEmpty() )
+@@ -196,6 +201,16 @@ QString QgsSpatiaLiteFeatureIterator::wh
+   return QString( "%1=%2" ).arg( quotedPrimaryKey() ).arg( mRequest.filterFid() );
+ }
+ 
++QString QgsSpatiaLiteFeatureIterator::whereClauseFids()
++{
++  QStringList whereClauses;
++  foreach ( const QgsFeatureId featureId, mRequest.filterFids() )
++  {
++    whereClauses << QString( "%1=%2" ).arg( quotedPrimaryKey() ).arg( featureId );
++  }
++  return whereClauses.isEmpty() ? "" : whereClauses.join( " OR " ).prepend( "(" ).append( ")" );
++}
++
+ QString QgsSpatiaLiteFeatureIterator::whereClauseRect()
+ {
+   QgsRectangle rect = mRequest.filterRect();
+--- a/src/providers/spatialite/qgsspatialitefeatureiterator.h
++++ b/src/providers/spatialite/qgsspatialitefeatureiterator.h
+@@ -71,6 +71,7 @@ class QgsSpatiaLiteFeatureIterator : pub
+ 
+     QString whereClauseRect();
+     QString whereClauseFid();
++    QString whereClauseFids();
+     QString mbr( const QgsRectangle& rect );
+     bool prepareStatement( QString whereClause );
+     QString quotedPrimaryKey();
diff --git a/debian/patches/0001-german-translation-update-2.patch b/debian/patches/0001-german-translation-update-2.patch
new file mode 100644
index 0000000..cf17d1b
--- /dev/null
+++ b/debian/patches/0001-german-translation-update-2.patch
@@ -0,0 +1,2438 @@
+From 4bc74026022f0410007f308fd9f333534b5d7d43 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Sun, 19 Apr 2015 11:04:32 +0200
+Subject: german translation update
+Origin: https://github.com/qgis/QGIS/commit/4bc74026022f0410007f308fd9f333534b5d7d43
+
+---
+ doc/TRANSLATORS     |   89 +++--
+ i18n/CMakeLists.txt |    2 +-
+ i18n/qgis_de.ts     |  753 ++++++++++++++++++++++++++++++++++++++++--
+ i18n/qgis_en.ts     |  913 ++++++++++++++++++++++++++++++++++++++++++++++++---
+ 4 files changed, 1643 insertions(+), 114 deletions(-)
+
+--- a/doc/TRANSLATORS
++++ b/doc/TRANSLATORS
+@@ -1,47 +1,46 @@
+ <style>table {font-size:80%;}th {text-align:left; }.bartodo{ background-color:red;width:100px;height:20px;}.bardone{ background-color:green;width:80px;height:20px;font-size:80%;text-align:center;padding-top:4px;height:16px;color:white;}</style><table><tr><th colspan="2" style="width:250px;">Language</th><th>Finished %</th><th>Translators</th></tr>
+ 
+-<tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:13255 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:100px">100.0</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
+-<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:13169 unfinished:76 untranslated:10" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu</td></tr>
+-<tr><td><img src="qrc:/images/flags/nb.png"></td><td>Norwegian Bokmal</td><td><div title="finished:13169 unfinished:73 untranslated:13" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>James Stott, Maléne Peterson</td></tr>
+-<tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:13169 unfinished:73 untranslated:13" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar</td></tr>
+-<tr><td><img src="qrc:/images/flags/gl.png"></td><td>Galician</td><td><div title="finished:13169 unfinished:71 untranslated:15" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Xan Vieiro</td></tr>
+-<tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:13169 unfinished:68 untranslated:18" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros </td></tr>
+-<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:13165 unfinished:75 untranslated:15" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
+-<tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:13169 unfinished:67 untranslated:19" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Victor Axbom, Lars Luthman, Magnus Homann, Klas Karlsson, Isabelle J Wigren, Daniel Rosander, Anders Ekwall, Magnus Nilsson, Jonas Svensson, Christian Brinkenberg</td></tr>
+-<tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:13167 unfinished:65 untranslated:23" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp</td></tr>
+-<tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:13153 unfinished:68 untranslated:34" class="bartodo"><div class="bardone" style="width:99px">99.5</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo</td></tr>
+-<tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:13151 unfinished:66 untranslated:38" class="bartodo"><div class="bardone" style="width:99px">99.5</div></div></td><td>Kari Salovaara, Marko Järvenpää</td></tr>
+-<tr><td><img src="qrc:/images/flags/eu.png"></td><td>Basque</td><td><div title="finished:13017 unfinished:73 untranslated:165" class="bartodo"><div class="bardone" style="width:98px">98.5</div></div></td><td>Asier Sarasua Garmendia, Irantzu Alvarez</td></tr>
+-<tr><td><img src="qrc:/images/flags/ja.png"></td><td>Japanese</td><td><div title="finished:12956 unfinished:36 untranslated:263" class="bartodo"><div class="bardone" style="width:97px">97.9</div></div></td><td>BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate</td></tr>
+-<tr><td><img src="qrc:/images/flags/pl.png"></td><td>Polish</td><td><div title="finished:12697 unfinished:24 untranslated:534" class="bartodo"><div class="bardone" style="width:95px">95.9</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok</td></tr>
+-<tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:12393 unfinished:45 untranslated:817" class="bartodo"><div class="bardone" style="width:93px">93.7</div></div></td><td>Zoltan Siki</td></tr>
+-<tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:12306 unfinished:53 untranslated:896" class="bartodo"><div class="bardone" style="width:93px">93.0</div></div></td><td>Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar</td></tr>
+-<tr><td><img src="qrc:/images/flags/da.png"></td><td>Danish</td><td><div title="finished:12268 unfinished:13 untranslated:974" class="bartodo"><div class="bardone" style="width:92px">92.6</div></div></td><td>Jacob Overgaard Madsen, Bo Victor Thomsen</td></tr>
+-<tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese simplified</td><td><div title="finished:12192 unfinished:22 untranslated:1041" class="bartodo"><div class="bardone" style="width:92px">92.1</div></div></td><td>Calvin Ngei, Lisashen</td></tr>
+-<tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:12178 unfinished:21 untranslated:1056" class="bartodo"><div class="bardone" style="width:91px">92.0</div></div></td><td>Calvin Ngei, Zhang Jun, Richard Xie</td></tr>
+-<tr><td><img src="qrc:/images/flags/ko.png"></td><td>Korean</td><td><div title="finished:12082 unfinished:3 untranslated:1170" class="bartodo"><div class="bardone" style="width:91px">91.2</div></div></td><td>OSGeo Korean Chapter</td></tr>
+-<tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:12040 unfinished:33 untranslated:1182" class="bartodo"><div class="bardone" style="width:90px">91.0</div></div></td><td>Alexander Bruy, Artem Popov</td></tr>
+-<tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:12040 unfinished:17 untranslated:1198" class="bartodo"><div class="bardone" style="width:90px">90.9</div></div></td><td>Phan Anh, Bùi Hữu Mạnh</td></tr>
+-<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan (Province of China))</td><td><div title="finished:11989 unfinished:14 untranslated:1252" class="bartodo"><div class="bardone" style="width:90px">90.5</div></div></td><td>Nung-yao Lin</td></tr>
+-<tr><td><img src="qrc:/images/flags/cs.png"></td><td>Czech</td><td><div title="finished:11843 unfinished:17 untranslated:1395" class="bartodo"><div class="bardone" style="width:89px">89.4</div></div></td><td>Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček</td></tr>
+-<tr><td><img src="qrc:/images/flags/hi.png"></td><td>Hindi</td><td><div title="finished:11368 unfinished:4 untranslated:1883" class="bartodo"><div class="bardone" style="width:85px">85.8</div></div></td><td>Harish Kumar Solanki</td></tr>
+-<tr><td><img src="qrc:/images/flags/lt.png"></td><td>Lithuanian</td><td><div title="finished:10774 unfinished:32 untranslated:2449" class="bartodo"><div class="bardone" style="width:81px">81.4</div></div></td><td>Paulius Litvinas, Tomas Straupis, Kestas M</td></tr>
+-<tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:10754 unfinished:64 untranslated:2437" class="bartodo"><div class="bardone" style="width:81px">81.4</div></div></td><td>Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa</td></tr>
+-<tr><td><img src="qrc:/images/flags/bs.png"></td><td>Bosnian</td><td><div title="finished:10514 unfinished:16 untranslated:2725" class="bartodo"><div class="bardone" style="width:79px">79.4</div></div></td><td>Almir Karabegovic</td></tr>
+-<tr><td><img src="qrc:/images/flags/km.png"></td><td>Central Khmer</td><td><div title="finished:9381 unfinished:11 untranslated:3863" class="bartodo"><div class="bardone" style="width:70px">70.8</div></div></td><td>Khoem Sokhem</td></tr>
+-<tr><td><img src="qrc:/images/flags/sl.png"></td><td>Slovenian</td><td><div title="finished:9036 unfinished:13 untranslated:4206" class="bartodo"><div class="bardone" style="width:68px">68.2</div></div></td><td>Jože Detečnik, Dejan Gregor, Jaka Kranjc</td></tr>
+-<tr><td><img src="qrc:/images/flags/lv.png"></td><td>Latvian</td><td><div title="finished:8901 unfinished:49 untranslated:4305" class="bartodo"><div class="bardone" style="width:67px">67.3</div></div></td><td>Maris Nartiss, Pēteris Brūns</td></tr>
+-<tr><td><img src="qrc:/images/flags/ar.png"></td><td>Arabic</td><td><div title="finished:8889 unfinished:31 untranslated:4335" class="bartodo"><div class="bardone" style="width:67px">67.2</div></div></td><td>Ichaouia Amine, Hosham Munier</td></tr>
+-<tr><td><img src="qrc:/images/flags/et.png"></td><td>Estonian</td><td><div title="finished:8813 unfinished:32 untranslated:4410" class="bartodo"><div class="bardone" style="width:66px">66.6</div></div></td><td>Veiko Viil</td></tr>
+-<tr><td><img src="qrc:/images/flags/hr.png"></td><td>Croatian</td><td><div title="finished:7451 unfinished:15 untranslated:5789" class="bartodo"><div class="bardone" style="width:56px">56.3</div></div></td><td>Zoran Jankovic</td></tr>
+-<tr><td><img src="qrc:/images/flags/tr.png"></td><td>Turkish</td><td><div title="finished:6838 unfinished:7 untranslated:6410" class="bartodo"><div class="bardone" style="width:51px">51.6</div></div></td><td>Osman Yalçın YILMAZ, Omur Saygin</td></tr>
+-<tr><td><img src="qrc:/images/flags/sk.png"></td><td>Slovak</td><td><div title="finished:5930 unfinished:980 untranslated:6345" class="bartodo"><div class="bardone" style="width:48px">48.4</div></div></td><td>Lubos Balazovic, Jana Kormanikova, Ivan Mincik</td></tr>
+-<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian (latin)</td><td><div title="finished:6244 unfinished:39 untranslated:6972" class="bartodo"><div class="bardone" style="width:47px">47.3</div></div></td><td>Goran Ivanković</td></tr>
+-<tr><td><img src="qrc:/images/flags/el.png"></td><td>Modern Greek (1453-)</td><td><div title="finished:6186 unfinished:12 untranslated:7057" class="bartodo"><div class="bardone" style="width:46px">46.7</div></div></td><td>Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves</td></tr>
+-<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian</td><td><div title="finished:6002 unfinished:27 untranslated:7226" class="bartodo"><div class="bardone" style="width:45px">45.4</div></div></td><td>Goran Ivanković</td></tr>
+-<tr><td><img src="qrc:/images/flags/ca.png"></td><td>Catalan</td><td><div title="finished:5151 unfinished:25 untranslated:8079" class="bartodo"><div class="bardone" style="width:38px">39.0</div></div></td><td>Albert F, Pau Reguant Ridó, Xavier Roijals</td></tr>
+-<tr><td><img src="qrc:/images/flags/th.png"></td><td>Thai</td><td><div title="finished:5071 unfinished:27 untranslated:8157" class="bartodo"><div class="bardone" style="width:38px">38.4</div></div></td><td>Man Chao</td></tr>
+-<tr><td><img src="qrc:/images/flags/fa.png"></td><td>Persian</td><td><div title="finished:5037 unfinished:32 untranslated:8186" class="bartodo"><div class="bardone" style="width:38px">38.1</div></div></td><td>Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan</td></tr>
+-<tr><td><img src="qrc:/images/flags/is.png"></td><td>Icelandic</td><td><div title="finished:4917 unfinished:28 untranslated:8310" class="bartodo"><div class="bardone" style="width:37px">37.2</div></div></td><td>Ásta Kristín Óladóttir, Thordur Ivarsson</td></tr>
+-<tr><td><img src="qrc:/images/flags/uk.png"></td><td>Ukrainian</td><td><div title="finished:4836 unfinished:21 untranslated:8398" class="bartodo"><div class="bardone" style="width:36px">36.6</div></div></td><td>Alexander Bruy</td></tr>
+-<tr><td><img src="qrc:/images/flags/mn.png"></td><td>Mongolian</td><td><div title="finished:4632 unfinished:19 untranslated:8604" class="bartodo"><div class="bardone" style="width:35px">35.0</div></div></td><td>Bayarmaa Enkhtur</td></tr></table>
++<tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:13256 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:100px">100.0</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
++<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:13134 unfinished:92 untranslated:30" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu, Marie Silvestre,  [...]
++<tr><td><img src="qrc:/images/flags/nb.png"></td><td>Norwegian Bokmal</td><td><div title="finished:13134 unfinished:89 untranslated:33" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>James Stott, Maléne Peterson</td></tr>
++<tr><td><img src="qrc:/images/flags/gl.png"></td><td>Galician</td><td><div title="finished:13134 unfinished:88 untranslated:34" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Xan Vieiro</td></tr>
++<tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:13134 unfinished:88 untranslated:34" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar</td></tr>
++<tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:13134 unfinished:83 untranslated:39" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Victor Axbom, Lars Luthman, Magnus Homann, Klas Karlsson, Isabelle J Wigren, Daniel Rosander, Anders Ekwall, Magnus Nilsson, Jonas Svensson, Christian Brinkenberg</td></tr>
++<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:13130 unfinished:89 untranslated:37" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
++<tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:13134 unfinished:81 untranslated:41" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros </td></tr>
++<tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:13132 unfinished:80 untranslated:44" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp</td></tr>
++<tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:13118 unfinished:84 untranslated:54" class="bartodo"><div class="bardone" style="width:99px">99.3</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo</td></tr>
++<tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:13116 unfinished:77 untranslated:63" class="bartodo"><div class="bardone" style="width:99px">99.2</div></div></td><td>Kari Salovaara, Marko Järvenpää</td></tr>
++<tr><td><img src="qrc:/images/flags/eu.png"></td><td>Basque</td><td><div title="finished:12983 unfinished:88 untranslated:185" class="bartodo"><div class="bardone" style="width:98px">98.3</div></div></td><td>Asier Sarasua Garmendia, Irantzu Alvarez</td></tr>
++<tr><td><img src="qrc:/images/flags/ja.png"></td><td>Japanese</td><td><div title="finished:12921 unfinished:52 untranslated:283" class="bartodo"><div class="bardone" style="width:97px">97.7</div></div></td><td>BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate</td></tr>
++<tr><td><img src="qrc:/images/flags/pl.png"></td><td>Polish</td><td><div title="finished:12668 unfinished:33 untranslated:555" class="bartodo"><div class="bardone" style="width:95px">95.7</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok</td></tr>
++<tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:12364 unfinished:58 untranslated:834" class="bartodo"><div class="bardone" style="width:93px">93.5</div></div></td><td>Zoltan Siki</td></tr>
++<tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:12272 unfinished:64 untranslated:920" class="bartodo"><div class="bardone" style="width:92px">92.8</div></div></td><td>Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar</td></tr>
++<tr><td><img src="qrc:/images/flags/da.png"></td><td>Danish</td><td><div title="finished:12240 unfinished:27 untranslated:989" class="bartodo"><div class="bardone" style="width:92px">92.4</div></div></td><td>Jacob Overgaard Madsen, Bo Victor Thomsen</td></tr>
++<tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese simplified</td><td><div title="finished:12161 unfinished:39 untranslated:1056" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Calvin Ngei, Lisashen</td></tr>
++<tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:12147 unfinished:38 untranslated:1071" class="bartodo"><div class="bardone" style="width:91px">91.8</div></div></td><td>Calvin Ngei, Zhang Jun, Richard Xie</td></tr>
++<tr><td><img src="qrc:/images/flags/ko.png"></td><td>Korean</td><td><div title="finished:12054 unfinished:12 untranslated:1190" class="bartodo"><div class="bardone" style="width:90px">91.0</div></div></td><td>OSGeo Korean Chapter</td></tr>
++<tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:12013 unfinished:45 untranslated:1198" class="bartodo"><div class="bardone" style="width:90px">90.8</div></div></td><td>Alexander Bruy, Artem Popov</td></tr>
++<tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:12012 unfinished:28 untranslated:1216" class="bartodo"><div class="bardone" style="width:90px">90.7</div></div></td><td>Phan Anh, Bùi Hữu Mạnh</td></tr>
++<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan (Province of China))</td><td><div title="finished:11962 unfinished:28 untranslated:1266" class="bartodo"><div class="bardone" style="width:90px">90.3</div></div></td><td>Nung-yao Lin</td></tr>
++<tr><td><img src="qrc:/images/flags/cs.png"></td><td>Czech</td><td><div title="finished:11816 unfinished:32 untranslated:1408" class="bartodo"><div class="bardone" style="width:89px">89.3</div></div></td><td>Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček</td></tr>
++<tr><td><img src="qrc:/images/flags/hi.png"></td><td>Hindi</td><td><div title="finished:11342 unfinished:17 untranslated:1897" class="bartodo"><div class="bardone" style="width:85px">85.6</div></div></td><td>Harish Kumar Solanki</td></tr>
++<tr><td><img src="qrc:/images/flags/lt.png"></td><td>Lithuanian</td><td><div title="finished:10746 unfinished:43 untranslated:2467" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Paulius Litvinas, Tomas Straupis, Kestas M</td></tr>
++<tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:10727 unfinished:71 untranslated:2458" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa</td></tr>
++<tr><td><img src="qrc:/images/flags/bs.png"></td><td>Bosnian</td><td><div title="finished:10487 unfinished:29 untranslated:2740" class="bartodo"><div class="bardone" style="width:79px">79.2</div></div></td><td>Almir Karabegovic</td></tr>
++<tr><td><img src="qrc:/images/flags/km.png"></td><td>Central Khmer</td><td><div title="finished:9355 unfinished:20 untranslated:3881" class="bartodo"><div class="bardone" style="width:70px">70.6</div></div></td><td>Khoem Sokhem</td></tr>
++<tr><td><img src="qrc:/images/flags/sl.png"></td><td>Slovenian</td><td><div title="finished:9009 unfinished:24 untranslated:4223" class="bartodo"><div class="bardone" style="width:68px">68.1</div></div></td><td>Jože Detečnik, Dejan Gregor, Jaka Kranjc</td></tr>
++<tr><td><img src="qrc:/images/flags/lv.png"></td><td>Latvian</td><td><div title="finished:8874 unfinished:60 untranslated:4322" class="bartodo"><div class="bardone" style="width:67px">67.2</div></div></td><td>Maris Nartiss, Pēteris Brūns</td></tr>
++<tr><td><img src="qrc:/images/flags/ar.png"></td><td>Arabic</td><td><div title="finished:8862 unfinished:43 untranslated:4351" class="bartodo"><div class="bardone" style="width:67px">67.0</div></div></td><td>Ichaouia Amine, Hosham Munier</td></tr>
++<tr><td><img src="qrc:/images/flags/et.png"></td><td>Estonian</td><td><div title="finished:8786 unfinished:44 untranslated:4426" class="bartodo"><div class="bardone" style="width:66px">66.4</div></div></td><td>Veiko Viil</td></tr>
++<tr><td><img src="qrc:/images/flags/hr.png"></td><td>Croatian</td><td><div title="finished:7424 unfinished:25 untranslated:5807" class="bartodo"><div class="bardone" style="width:56px">56.1</div></div></td><td>Zoran Jankovic</td></tr>
++<tr><td><img src="qrc:/images/flags/tr.png"></td><td>Turkish</td><td><div title="finished:6811 unfinished:20 untranslated:6425" class="bartodo"><div class="bardone" style="width:51px">51.5</div></div></td><td>Osman Yalçın YILMAZ, Omur Saygin</td></tr>
++<tr><td><img src="qrc:/images/flags/sk.png"></td><td>Slovak</td><td><div title="finished:5929 unfinished:962 untranslated:6365" class="bartodo"><div class="bardone" style="width:48px">48.4</div></div></td><td>Lubos Balazovic, Jana Kormanikova, Ivan Mincik</td></tr>
++<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian (latin)</td><td><div title="finished:6217 unfinished:49 untranslated:6990" class="bartodo"><div class="bardone" style="width:47px">47.1</div></div></td><td>Goran Ivanković</td></tr>
++<tr><td><img src="qrc:/images/flags/el.png"></td><td>Modern Greek (1453-)</td><td><div title="finished:6159 unfinished:19 untranslated:7078" class="bartodo"><div class="bardone" style="width:46px">46.5</div></div></td><td>Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves</td></tr>
++<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian</td><td><div title="finished:5976 unfinished:36 untranslated:7244" class="bartodo"><div class="bardone" style="width:45px">45.2</div></div></td><td>Goran Ivanković</td></tr>
++<tr><td><img src="qrc:/images/flags/ca.png"></td><td>Catalan</td><td><div title="finished:5126 unfinished:32 untranslated:8098" class="bartodo"><div class="bardone" style="width:38px">38.8</div></div></td><td>Albert F, Pau Reguant Ridó, Xavier Roijals</td></tr>
++<tr><td><img src="qrc:/images/flags/th.png"></td><td>Thai</td><td><div title="finished:5044 unfinished:35 untranslated:8177" class="bartodo"><div class="bardone" style="width:38px">38.2</div></div></td><td>Man Chao</td></tr>
++<tr><td><img src="qrc:/images/flags/fa.png"></td><td>Persian</td><td><div title="finished:5011 unfinished:41 untranslated:8204" class="bartodo"><div class="bardone" style="width:37px">38.0</div></div></td><td>Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan</td></tr>
++<tr><td><img src="qrc:/images/flags/is.png"></td><td>Icelandic</td><td><div title="finished:4892 unfinished:33 untranslated:8331" class="bartodo"><div class="bardone" style="width:37px">37.0</div></div></td><td>Ásta Kristín Óladóttir, Thordur Ivarsson</td></tr>
++<tr><td><img src="qrc:/images/flags/uk.png"></td><td>Ukrainian</td><td><div title="finished:4809 unfinished:29 untranslated:8418" class="bartodo"><div class="bardone" style="width:36px">36.4</div></div></td><td>Alexander Bruy</td></tr></table>
+--- a/i18n/CMakeLists.txt
++++ b/i18n/CMakeLists.txt
+@@ -22,7 +22,7 @@ ENDMACRO(ADD_TRANSLATION_FILES)
+ # make sure the output directory exists
+ file(MAKE_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/i18n)
+ 
+-SET(TS_FILES qgis_ar.ts qgis_bs.ts qgis_ca.ts qgis_cs.ts qgis_da.ts qgis_de.ts qgis_el.ts qgis_es.ts qgis_et.ts qgis_eu.ts qgis_fa.ts qgis_fi.ts qgis_fr.ts qgis_gl.ts qgis_hi.ts qgis_hr.ts qgis_hu.ts qgis_id.ts qgis_is.ts qgis_it.ts qgis_ja.ts qgis_km.ts qgis_ko.ts qgis_lt.ts qgis_lv.ts qgis_mn.ts qgis_nb.ts qgis_nl.ts qgis_pl.ts qgis_pt_BR.ts qgis_pt_PT.ts qgis_ro.ts qgis_ru.ts qgis_sk.ts qgis_sl.ts qgis_sr.ts qgis_sr at latin.ts qgis_sv.ts qgis_th.ts qgis_tr.ts qgis_uk.ts qgis_vi.ts qgis [...]
++SET(TS_FILES qgis_ar.ts qgis_bs.ts qgis_ca.ts qgis_cs.ts qgis_da.ts qgis_de.ts qgis_el.ts qgis_es.ts qgis_et.ts qgis_eu.ts qgis_fa.ts qgis_fi.ts qgis_fr.ts qgis_gl.ts qgis_hi.ts qgis_hr.ts qgis_hu.ts qgis_id.ts qgis_is.ts qgis_it.ts qgis_ja.ts qgis_km.ts qgis_ko.ts qgis_lt.ts qgis_lv.ts qgis_nb.ts qgis_nl.ts qgis_pl.ts qgis_pt_BR.ts qgis_pt_PT.ts qgis_ro.ts qgis_ru.ts qgis_sk.ts qgis_sl.ts qgis_sr.ts qgis_sr at latin.ts qgis_sv.ts qgis_th.ts qgis_tr.ts qgis_uk.ts qgis_vi.ts qgis_zh-Hans.ts [...]
+ 
+ ADD_TRANSLATION_FILES (QM_FILES ${TS_FILES})
+ 
+--- a/i18n/qgis_de.ts
++++ b/i18n/qgis_de.ts
+@@ -632,12 +632,16 @@ Zum Überprüfen Ergebnisdialog öffnen.
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
+     </message>
+     <message>
+         <source>Nodata value, leave blank to take the nodata value from input</source>
+         <translation>Leerwert, auf 'none' belassen, um den Leerwert aus der Eingabe zu übernehmen</translation>
+     </message>
++    <message>
++        <source>Clipped</source>
++        <translation>Zugeschnitten</translation>
++    </message>
+ </context>
+ <context>
+     <name>ClipByMask</name>
+@@ -740,7 +744,11 @@ Zum Überprüfen Ergebnisdialog öffnen.
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Color relief</source>
++        <translation>Farbrelief</translation>
+     </message>
+ </context>
+ <context>
+@@ -7007,7 +7015,7 @@ Bitte installieren bevor GRASS-Algorithm
+     </message>
+     <message>
+         <source>Output</source>
+-        <translation>Ausgabe</translation>
++        <translation type="obsolete">Ausgabe</translation>
+     </message>
+     <message>
+         <source>Invalid grid spacing: %s/%s</source>
+@@ -7021,6 +7029,10 @@ Bitte installieren bevor GRASS-Algorithm
+         <source>Vertical spacing is too small for the covered area</source>
+         <translation>Vertikaler Abstand ist zu klein für abgedeckten Bereich</translation>
+     </message>
++    <message>
++        <source>Grid</source>
++        <translation>Gitter</translation>
++    </message>
+ </context>
+ <context>
+     <name>GridAverage</name>
+@@ -7058,7 +7070,11 @@ Bitte installieren bevor GRASS-Algorithm
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Average</source>
++        <translation>Gemittelt</translation>
+     </message>
+ </context>
+ <context>
+@@ -7101,7 +7117,11 @@ Bitte installieren bevor GRASS-Algorithm
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Interpolated metrics</source>
++        <translation>Interpolierte Maße</translation>
+     </message>
+ </context>
+ <context>
+@@ -7148,12 +7168,16 @@ Bitte installieren bevor GRASS-Algorithm
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
+     </message>
+     <message>
+         <source>Smoothing</source>
+         <translation>Glättung</translation>
+     </message>
++    <message>
++        <source>Interpolated IDW</source>
++        <translation>Interpolierte IDW</translation>
++    </message>
+ </context>
+ <context>
+     <name>GridMetrics</name>
+@@ -7230,7 +7254,11 @@ Bitte installieren bevor GRASS-Algorithm
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Interpolated nearest neighbor</source>
++        <translation>Interpolierter nächster Nachbar</translation>
+     </message>
+ </context>
+ <context>
+@@ -14421,7 +14449,7 @@ Antwort war:
+     </message>
+     <message>
+         <source>Fatal error occurred in GRASS library. QGIS gets over the error but any next fatal error will cause QGIS exit without warning. This is a problem of GRASS 7.0.0beta1 but it is fixed in GRASS 7.1 and higher. Error message: %1</source>
+-        <translation>Fataler Fehler in der GRASS Bibliothek. QGIS überspringt diesen Fehler, wird jedoch beim nächsten fatalen Fehler ohne Warnung beendet. Dies ist ein Problem von GRASS 7.0.0beta1, wurde aber bereits für GRASS 7.1 und höher behoben. Fehlermeldung: %1</translation>
++        <translation type="obsolete">Fataler Fehler in der GRASS Bibliothek. QGIS überspringt diesen Fehler, wird jedoch beim nächsten fatalen Fehler ohne Warnung beendet. Dies ist ein Problem von GRASS 7.0.0beta1, wurde aber bereits für GRASS 7.1 und höher behoben. Fehlermeldung: %1</translation>
+     </message>
+     <message>
+         <source>Raster image fill</source>
+@@ -16993,6 +17021,10 @@ Ausdruckfehler:
+         <source>, spatially limited</source>
+         <translation>, räumlich beschränkt</translation>
+     </message>
++    <message>
++        <source>Ctrl+R</source>
++        <translation>Strg+R</translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsAttributeTableModel</name>
+@@ -24443,6 +24475,18 @@ nicht angezeigt</translation>
+         <source>The file has been updated by another application - reloading</source>
+         <translation>Die Datei wurde von einer anderen Applikation geändert - wird neugeladen</translation>
+     </message>
++    <message>
++        <source>Whole number (integer)</source>
++        <translation>Ganzzahl (integer)</translation>
++    </message>
++    <message>
++        <source>Decimal number (double)</source>
++        <translation>Dezimalzahl (double)</translation>
++    </message>
++    <message>
++        <source>Text, unlimited length (text)</source>
++        <translation>Text, unbegrenzte Länge (text)</translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsDelimitedTextSourceSelect</name>
+@@ -29906,7 +29950,7 @@ in Zeile %2, Spalte %3</translation>
+     </message>
+     <message>
+         <source>Cannot activate grass</source>
+-        <translation>Kann GRASS nicht aktivieren</translation>
++        <translation type="obsolete">Kann GRASS nicht aktivieren</translation>
+     </message>
+ </context>
+ <context>
+@@ -50811,6 +50855,29 @@ Fehler in Zeile %d</translation>
+     <name>SymetricalDifference</name>
+     <message>
+         <source>Input layer</source>
++        <translation type="obsolete">Eingabelayer</translation>
++    </message>
++    <message>
++        <source>Difference layer</source>
++        <translation type="obsolete">Differenzlayer</translation>
++    </message>
++    <message>
++        <source>Symetrical difference</source>
++        <translation type="obsolete">Symmetrische Differenz</translation>
++    </message>
++    <message>
++        <source>Geometry exception while computing symetrical difference</source>
++        <translation type="obsolete">Geometrieausnahme bei Berechnung der symmetrischen Differenz</translation>
++    </message>
++    <message>
++        <source>Feature exception while computing symetrical difference</source>
++        <translation type="obsolete">Objektausnahme beim Berechnen der symmetrischen Differenz</translation>
++    </message>
++</context>
++<context>
++    <name>SymmetricalDifference</name>
++    <message>
++        <source>Input layer</source>
+         <translation>Eingabelayer</translation>
+     </message>
+     <message>
+@@ -52318,7 +52385,11 @@ Fehler in Zeile %d</translation>
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Virtual</source>
++        <translation>Virtuell</translation>
+     </message>
+ </context>
+ <context>
+@@ -54304,7 +54375,7 @@ The following options can be added
+ 
+ 
+ </source>
+-        <translation><h3>Getrennter Textlayer</h3>
++        <translation type="obsolete"><h3>Getrennter Textlayer</h3>
+ Lädt und zeigt getrennten Text an
+ <p>
+ <a href="#re">Überblick</a><br/>
+@@ -55239,6 +55310,560 @@ Die Ergebnisse können in eine neue Attr
+ Um den Feldrechner zu öffnen, müssen Sie den Vektorlayer zuvor in den Bearbeitungsmodus versetzen.
+ </translation>
+     </message>
++    <message>
++        <source><h3>Delimited Text File Layer</h3>
++Loads and displays delimited text files
++<p>
++<a href="#re">Overview</a><br/>
++<a href="#creating">Creating a delimited text layer</a><br/>
++<a href="#csv">How the delimiter, quote, and escape characters work</a><br />
++<a href="#regexp">How regular expression delimiters work</a><br />
++<a href="#wkt">How WKT text is interpreted</a><br />
++<a href="#attributes">Attributes in delimited text files</a><br />
++<a href="#example">Example of a text file with X,Y point coordinates</a><br/>
++<a href="#wkt_example">Example of a text file with WKT geometries</a><br/>
++<a href="#python">Using delimited text layers in Python</a><br/>
++</p>
++
++<h4><a name="re">Overview</a></h4>
++<p>A &quot;delimited text file&quot; contains data in which each record starts on a new line, and 
++is split into fields by a delimiter such as a comma.  
++This type of file is commonly exported from spreadsheets (for example CSV files) or databases.  
++Typically the first line of a delimited text file contains the names of the fields.  
++</p>
++<p>
++Delimited text files can be loaded into QGIS as a layer. 
++The records can be displayed spatially either as a point
++defined by X and Y coordinates, or using a Well Known Text (WKT) definition of a geometry which may
++describe points, lines, and polygons of arbitrary complexity.  The file can also be loaded as an attribute
++only table, which can then be joined to other tables in QGIS.
++</p>
++<p>
++In addition to the geometry definition the file can contain text, integer, and real number fields.  By default 
++QGIS will choose the type of field based on its the non blank values of the field.  If all can be interpreted
++as integer then the type will be integer, if all can be interpreted as real numbers then the type will
++be double, otherwise the type will be text.
++</p>
++<p>
++QGIS can also read the types from an OGR CSV driver compatible &quot;csvt&quot; file.  
++This is a file alongside the data file, but with a &quot;t&quot; appended to the file name. 
++The file should just contain one line which lists the type of each field. 
++Valid types are &quot;integer&quot;, &quot;long&quot;, &quot;longlong&quot;, &quot;real&quot;, 
++&quot;string&quot;, &quot;date&quot;, &quot;time&quot;, and &quot;datetime&quot;. 
++The date, time, and datetime types are treated as strings by the delimited text provider.
++Each type may be followed by a width and precision, for example &quot;real(10.4)&quot;.
++The list of types are separated by commas, regardless of the delimiter used in the data file.  An
++example of a valid format file would be:
++</p>
++
++<pre>
++&quot;integer&quot;,&quot;string&quot;,&quot;string(20)&quot;,&quot;real(20.4)&quot;
++</pre>
++
++<h4><a name="creating">Creating a delimited text layer</a></h4>
++<p>Creating a delimited text layer involves choosing the data file, defining the format (how each record is to
++be split into fields), and defining the geometry is represented.  
++This is managed with the delimited text dialog as detailed below.  
++The dialog box displays a sample from the beginning of the file which shows how the format
++options have been applied.
++</p>
++<h5>Choosing the data file</h5>
++<p>Use the &quot;Browse...&quot; button to select the data file.  Once the file is selected the
++layer name will automatically be populated based on the file name.  The layer name is used to represent
++the data in the QGIS legend.  
++</p>
++<p>
++By default files are assumed to be encoded as UTF-8.  However other file
++encodings can be selected.  For example &quot;System&quot; uses the default encoding for the operating system.  
++It is safer to use an explicit coding if the QGIS project needs to be portable.
++</p>
++<h5>Specifying the file format</h5>
++<p>The file format can be one of
++<ul>
++    <li>CSV file format.  This is a format commonly used by spreadsheets, in which fields are delimited
++    by a comma character, and quoted using a &quot;(quote) character.  Within quoted fields, a quote
++    mark is entered as &quot;&quot;.</li>
++    <li>Selected delimiters.  Each record is split into fields using one or more  delimiter character.
++    Quote characters are used for fields which may contain delimiters.  Escape characters may be used 
++    to treat the following character as a normal character (ie to include delimiter, quote, and 
++    new line characters in text fields).  The use of delimiter, quote, and escape characters is detailed <a href="#csv">below</a>.
++    <li>Regular expression.  Each line is split into fields using a &quot;regular expression&quot; delimiter.
++    The use of regular expressions is details <a href="#regexp">below</a>.
++</ul>
++<h5>Record and field options</h5>
++<p>The following options affect the selection of records and fields from the data file</p>
++<ul>
++    <li>Number of header lines to discard: used to ignore header lines at the beginning of the text file</li>
++    <li>First record has fields names: if selected then the first record in the file (after the discarded lines) is interpreted as names of fields, rather than as a data record.</li>
++    <li>Trim fields: if selected then leading and trailing whitespace characters will be removed from each field (except quoted fields). </li>
++    <li>Discard empty fields: if selected then empty fields (after trimming) will be discard.  This 
++    affects the alignment of data into fields and is equivalent to treating consecutive delimiters as a 
++    single delimiter.  Quoted fields are never discarded.</li>
++    <li>Decimal separator is comma: if selected then commas instead of points are used as the decimal separator in real numbers.  For
++    example <tt>-51,354</tt> is equivalent to -51.354.
++    </li>
++</ul>
++<h5>Geometry definition</h5>
++<p>The geometry is can be define as one of</p>
++<ul>
++    <li>Point coordinates: each feature is represented as a point defined by X and Y coordinates.</li>
++    <li>Well known text (WKT) geometry: each feature is represented as a well known text string, for example
++    <tt>POINT(1.525622 51.20836)</tt>.  See details of the <a href="#wkt">well known text</a> format.
++    <li>No geometry (attribute only table): records will not be displayed on the map, but can be viewed
++    in the attribute table and joined to other layers in QGIS</li>
++</ul>
++<p>For point coordinates the following options apply:</p>
++<ul>
++    <li>X field: specifies the field containing the X coordinate</li>
++    <li>Y field: specifies the field containing the Y coordinate</li>
++    <li>DMS angles: if selected coordinates are represented as degrees/minutes/seconds
++    or degrees/minutes.  QGIS is quite permissive in its interpretation of degrees/minutes/seconds.
++    A valid DMS coordinate will contain three numeric fields with an optional hemisphere prefix or suffix
++    (N, E, or + are positive, S, W, or - are negative).  Additional non numeric characters are 
++    generally discarded.  For example <tt>N41d54'01.54&quot;</tt> is a valid coordinate.
++    </li>
++</ul>
++<p>For well known text geometry the following options apply:</p>
++<ul>
++    <li>Geometry field: the field containing the well known text definition.</li>
++    <li>Geometry type: one of &quot;Detect&quot; (detect), &quot;Point&quot;, &quot;Line&quot;, or &quot;Polygon&quot;.
++    QGIS layers can only display one type of geometry feature (point, line, or polygon). This option selects
++    which geometry type is displayed in text files containing multiple geometry types. Records containing
++   other geometry types are discarded.   
++    If &quot;Detect&quot; is selected then the type of the first geometry in the file will be used.
++    &quot;Point&quot; includes POINT and MULTIPOINT WKT types, &quot;Line&quot; includes LINESTRING and
++    MULTLINESTRING WKT types, and &quot;Polygon&quot; includes POLYGON and MULTIPOLYGON WKT types.
++</ul>
++<h5>Layer settings</h5>
++<p>Layer settings control the way the layer is managed in QGIS.  The options available are:</p>
++<ul>
++<li>Use spatial index. Create a spatial index to improve the performance of displaying and selecting spatial objects.
++This option may be useful for files larger than a few megabytes in size.</li>
++<li>Use subset index. Create an index if a subset of records is being used (either by explicitly setting a subset string 
++from the layer properties dialog, or an implicit subset of features for which the geometry is valid in files
++for which all not geometries are valid).  The index will only be created when a subset is defined.</li>
++<li>Watch file.  If this options is selected QGIS will watch the file for changes by other applications, and 
++reload the file when it is changed.  The map will not be updated until refreshed by the user, but indexes and
++extents will be reloaded.  This option should be selected if indexes are used and it is likely that another
++application will change the file. </li>
++</ul>
++
++<h4><a name="csv">How the delimiter, quote, and escape characters work</a></h4>
++<p>Records are split into fields using three character sets: 
++delimiter characters, quote characters, and escape characters.  
++Other characters in the record are considered as data, split into
++fields by delimiter characters. 
++Quote characters occur in pairs and cause the text between them to be treated as a data.  Escape characters cause the character following them to be treated as data.   
++</p>
++<p>
++Quote and escape characters cannot be the same as delimiter characters - they
++will be ignored if they are. Escape characters can be the same as quote characters, but behave differently
++if they are.</p>
++<p>The delimiter characters are used to mark the end of each field.  If more than one delimiter character
++is defined then any one of the characters can mark the end of a field.  The quote and escape characters 
++can override the delimiter character, so that it is treated as a normal data character.</p>
++<p>Quote characters may be used to mark the beginning and end of quoted fields. Quoted fields can 
++contain delimiters and may span multiple lines in the text file.  If a field is quoted then it must
++start and end with the same quote character.  Quote characters cannot occur within a field unless they
++are escaped.</p>
++<p>Escape characters which are not quote characters force the following character to be treated as data.  
++(that is, to stop it being treated as a new line, delimiter, or quote character).  
++</p>
++<p>Escape characters that are also quote characters have much more limited effect.  They only apply within quotes and only escape themselves.  For example, if 
++<tt>'</tt> is a quote and escape character, then the string
++<tt>'Smith''s&nbsp;Creek'</tt> will represent the value Smith's&nbsp;Creek.
++</p>
++
++
++<h4><a name="regexp">How regular expression delimiters work</a></h4>
++<p>Regular expressions are mini-language used to represent character patterns.  There are many variations
++of regular expression syntax - QGIS uses the syntax provided by the <a href="http://qt-project.org/doc/qt-4.8/qregexp.html">QRegExp</a> class of the <a href="http://qt.digia.com">Qt</a> framework.</p>
++<p>In a regular expression delimited file each line is treated as a record.  Each match of the regular expression in the line is treated as the end of a field.  
++If the regular expression contains capture groups (eg <tt>(cat|dog)</tt>)
++ then these are extracted as fields. 
++ If this is not desired then use non-capturing groups (eg <tt>(?:cat|dog)</tt>).
++</p>
++<p>The regular expression is treated differently if it is anchored to the start of the line (that is, the pattern starts with <tt>^</tt>).
++In this case the regular expression is matched against each line.  If the line does not match it is discarded
++as an invalid record.  Each capture group in the expression is treated as a field.  The regular expression
++is invalid if it does not have capture groups.  As an example this can be used as a (somewhat 
++unintuitive) means of loading data with fixed width fields.  For example the 
++expression
++<pre>
++^(.{5})(.{10})(.{20})(.{20})
++</pre>
++<p>will extract four fields of widths 5, 10, 20, and 20 characters from each line.  
++Lines less than 55 characters long will be discarded.
++</p>
++
++
++<h4><a name="wkt">How WKT text is interpreted</a></h4>
++<p>
++The delimited text layer recognizes the following 
++<a href="http://en.wikipedia.org/wiki/Well-known_text">well known text</a> types - 
++<tt>POINT</tt>, <tt>MULTIPOINT</tt>, <tt>LINESTRING</tt>, <tt>MULTILINESTRING</tt>, <tt>POLYGON</tt>, and <tt>MULTIPOLYGON</tt>.  
++It will accept geometries with
++a Z coordinate (eg <tt>POINT&nbsp;Z</tt>), a measure (<tt>POINT&nbsp;M</tt>), or both (<tt>POINT&nbsp;ZM</tt>).
++</p>
++<p>
++It can also handle the PostGIS EWKT variation, in which the geometry is preceded by an spatial reference 
++system id (eg <tt>SRID=4326;POINT(175.3&nbsp;41.2)</tt>), and a variant used by Informix in which the WKT is 
++preceded by an integer spatial reference id (eg <tt>1 POINT(175.3&nbsp;41.2)</tt>).
++In both cases the SRID is ignored.
++</p>
++
++
++
++<h4><a name="attributes">Attributes in delimited text files</a></h4> 
++<p>Each record in the delimited text file is split into fields representing
++attributes of the record.  Usually the attribute names are taken from the first
++data record in the file.  However if this does not contain attribute names, then they will be named <tt>field_1</tt>, <tt>field_2</tt>, and so on.  
++Also if records have more fields than are defined in the header record then these
++will be named <tt>field_#</tt>, where # is the field number (note that empty fields at the end of a record are ignored).
++QGIS may override 
++the names in the text file if they are numbers, or have names like <tt>field_#</tt>,
++or are duplicated.
++</p>
++<p>
++In addition to the attributes explicitly in the data file QGIS assigns a unique 
++feature id to each record which is the line number in the source file on which
++the record starts.  
++</p>
++<p>
++Each attribute also has a data type, one of string (text), integer, longlong,
++or real number.
++The data type is inferred from the content of the fields - if every non blank value
++is a valid integer then the type is integer, otherwise if it is a valid long long
++nubmer then the type is longlong, otherwise if it is a valid real
++number then the type is real, otherwise the type is string.  Note that this is
++based on the content of the fields - quoting fields does not change the way they
++are interpreted.
++</p>
++
++
++<h4><a name="example">Example of a text file with X,Y point coordinates</a></h4> 
++<pre>
++X;Y;ELEV
++-300120;7689960;13
++-654360;7562040;52
++1640;7512840;3
++</pre>
++<p>This file:</p>
++<ul>
++<li> Uses <b>;</b> as delimiter. Any character can be used to delimit the fields.</li>
++<li>The first row is the header row. It contains the field names X, Y and ELEV.</li>
++<li>The x coordinates are contained in the X field.</li>
++<li>The y coordinates are contained in the Y field.</li>
++</ul>
++<h4><a name="wkt_example">Example of a text file with WKT geometries</a></h4>
++<pre>
++id|wkt
++1|POINT(172.0702250 -43.6031036)
++2|POINT(172.0702250 -43.6031036)
++3|POINT(172.1543206 -43.5731302)
++4|POINT(171.9282585 -43.5493308)
++5|POINT(171.8827359 -43.5875983)
++</pre>
++<p>This file:</p>
++<ul>
++  <li>Has two fields defined in the header row: id and wkt.
++  <li>Uses <b>|</b> as a delimiter.</li>
++  <li>Specifies each point using the WKT notation
++</ul>
++
++<h4><a name="python">Using delimited text layers in Python</a></h4>
++<p>Delimited text data sources can be creating from Python in a similar way to other vector layers.
++The pattern is:
++</p>
++<pre>
++from PyQt4.QtCore import QUrl, QString
++from qgis.core import QgsVectorLayer, QgsMapLayerRegistry
++
++# Define the data source
++filename="test.csv"
++uri=QUrl.fromLocalFile(filename)
++uri.addQueryItem("type","csv")
++uri.addQueryItem("delimiter","|")
++uri.addQueryItem("wktField","wkt")
++# ... other delimited text parameters
++layer=QgsVectorLayer(QString(uri.toEncoded()),"Test CSV layer","delimitedtext")
++# Add the layer to the map
++if layer.isValid():
++    QgsMapLayerRegistry.instance().addMapLayer( layer )
++</pre>
++<p>This could be used to load the second example file above.</p>
++<p>The configuration of the delimited text layer is defined by adding query items to the uri.
++The following options can be added
++</p>
++<ul>
++    <li><tt>encoding=..</tt> defines the file encoding.  The default is &quot;UTF-8&quot;</li>
++    <li><tt>type=(csv|regexp|whitespace)</tt> defines the delimiter type.  Valid values are csv, 
++       regexp, and whitespace (which is just a special case of regexp).  The default is csv.</li>
++       <li><tt>delimiter=...</tt> defines the delimiters that will be used for csv formatted files, 
++       or the regular expression for regexp formatted files.  The default is , for CSV files.  There is
++       no default for regexp files.</li>
++       <li><tt>quote=..</tt> (for csv files) defines the characters used to quote fields. The default is &quot;</li>
++       <li><tt>escape=..</tt> (for csv files) defines the characters used to escape the special meaning of the next character. The default is &quot;</li>
++       <li><tt>skipLines=#</tt> defines the number of lines to discard from the beginning of the file. The default is 0.</li>
++       <li><tt>useHeader=(yes|no)</tt> defines whether the first data record contains the names of the data fields. The default is yes.</li>
++       <li><tt>trimFields=(yes|no)</tt> defines whether leading and trailing whitespace is to be removed from unquoted fields. The default is no.</li>
++       <li><tt>maxFields=#</tt> defines the maximum number of fields that will be loaded from the file.  
++       Additional fields in each record will be discarded. The default is 0 - include all fields.
++       (This option is not available from the delimited text layer dialog box).</li>
++       <li><tt>skipEmptyFields=(yes|no)</tt> defines whether empty unquoted fields will be discarded (applied after trimFields). The default is no.</li>
++       <li><tt>decimalPoint=.</tt> specifies an alternative character that may be used as a decimal point in numeric fields.  The default is a point (full stop) character.</li>
++       <li><tt>wktField=fieldname</tt> specifies the name or number (starting at 1) of the field containing a well known text geometry definition</li>
++       <li><tt>xField=fieldname</tt> specifies the name or number (starting at 1) of the field the X coordinate (only applies if wktField is not defined)</li>
++       <li><tt>yField=fieldname</tt> specifies the name or number (starting at 1) of the field the Y coordinate (only applies if wktField is not defined)</li>
++       <li><tt>geomType=(auto|point|line|polygon|none)</tt> specifies type of geometry for wkt fields, or none to load the file as an attribute-only table.  The default is auto.</li>
++       <li><tt>subset=expression</tt> specifies an expression used to identify a subset of the records that will be 
++       used.</li>
++       <li><tt>crs=...</tt> specifies the coordinate system to use for the vector layer, in a format accepted by QgsCoordinateReferenceSystem.createFromString (for example &quot;EPSG:4167&quot;).  If this is not 
++       specified then a dialog box may request this information from the user
++       when the layer is loaded (depending on QGIS CRS settings).</li>
++       <li><tt>subsetIndex=(yes|no)</tt> specifies whether the provider should build an index to define subset during the initial file scan.  The index will apply both for explicitly defined subsets, and for the implicit subset of features for which the geometry definition is valid.  By default the subset index is built if it is applicable.</li>
++       <li><tt>spatialIndex=(yes|no)</tt> specifies whether the provider should build a spatial index during the initial file scan.  By default the spatial index is not built. </li>
++       <li><tt>watchFile=(yes|no)</tt> specifies whether the provider should use a file system watcher to monitor for changes to the file.</li>
++       <li><tt>quiet=(yes|no)</tt> specifies whether errors encountered loading the layer are presented in a dialog box (they will be written to the QGIS log in any case). The default is no.  This option is not available from the GUI</li>
++</ul>
++
++
++</source>
++        <translation><h3>Getrennter Textlayer</h3>
++Lädt und zeigt getrennten Text an
++<p>
++<a href="#re">Überblick</a><br/>
++<a href="#creating">Erzeugung eines getrennten Textlayers</a><br/>
++<a href="#csv">Wie Trenn-, Anführungs- und Ausnahmezeichen funktionieren</a><br />
++<a href="#regexp">Wie reguläre Ausdrücke als Trennzeichen funktionieren</a><br />
++<a href="#wkt">Wie WKT interpretiert wird</a><br />
++<a href="#attributes">Attribute in getrennten Textdateien</a><br />
++<a href="#example">Beispiel einer Textdatei mit X,Y-Punktkoordinaten</a><br/>
++<a href="#wkt_example">Beispiel einer Textdatei mit WKT-Geometrien</a><br/>
++<a href="#python">Getrennte Textdateilayern in Python benutzen</a><br/>
++</p>
++
++<h4><a name="re">Überblick</a></h4>
++<p>Eine "getrennter Text"-Datei enthält Daten in denen jeder Datensatz in einer neuen Zeile beginnt, die durch Trennzeichen wie ein Komma in Felder aufgeteilt ist.
++Dieser Dateityp wird üblicherweise von Tabellenkalkulationen (z.B. CSV-Dateien) oder Datenbanken ausgegeben.  
++Normalerweise enthält die erste Zeile einer getrennten Textdatei die Feldnamen.  
++</p>
++<p>
++Getrennte Textdateien können in QGIS als Layer geladen werden. 
++Die Datensätze können räumlich entweder als durch X- und Y-Koordinaten definierte Punktkoordinaten oder als Well-Known-Text-Geometriedefinition (WKT), die Punkte, Linien und Polygone beliebiger Komplexität beschreibt, dargestellt werden. Die Datei kann auch nur als Attributtabelle geladen werden, die mit anderen Tabellen in QGIS verknüpft werden können.
++</p>
++<p>
++<p>
++Zusätzlich zur Geometriedefinition kann die Datei Text, ganze und Fließkommazahlen enthalten. QGIS wird den Feldtyp nach dem Inhalt der nicht leeren Felder wählen. Wenn alle als ganze Zahl interpretiert werden können, werden sie als gnaze Zahl, wenn alle als Fließkommazahl, werden sie als Fließkommazahl und ansonsten als Zeichenkette angesehen.
++</p>
++<p>
++QGIS kann die Typen auch einer OGR-CSV-Treiber kompatiblen "csvt"-Datei lesen. Diese Datei liegt nebene der Datendatei, aber mit einem an den Dateinamen angehängtem "t". Die Datei sollte nur eine Zeile enthalten, die die Feldtypen auflistet. Gültige Typen sind "integer" (ganze Zahl), "real" (Fließkommazahl), "string" (Zeichenkette), "date" (Datum), "time" (Zeit) und "datetime" (Datum&Zeit). Datum, Zeit u [...]
++</p>
++
++<pre>
++"integer","string","string(20)","real(20.4)"
++</pre>
++
++</p>
++<h4><a name="creating">Getrennten Textlayer erzeugen</a></h4>
++<p>Zur Erzeugung eines getrennten Textlayers muß eine Datei gewählt, das Format definiert (wie jeder Datensatz in Felder aufgeteilt wird) und festgelegt werden wird die Geometrierepräsentation angegeben werden.  
++Dies wird über den im folgenden beschriebenen Getrennter Textdialog eingegeben.  
++Der dialog zeigt ein Beispiele am Anfang der Datei an, die zeigen wie sich die Einstellungen auswirken.
++</p>
++<h5>Dateiauswahl</h5>
++<p>Klicken Sie auf den "Durchsuchen..."-Knopf um die Datei zu wählen.  Sobald die Datei gewählt ist, wird der Layername automatisch mit dem Dateinamen gefüllt.  Der Layername wird benutzt, um die Daten in der Legende anzuzeigen.  
++</p>
++<p>
++Normalerweise wird davon ausgegangen, dass die Dateien in UTF-8 kodiert sind.  Es können jedoch andere Kodierungen gewählt werden.  Z.B. nutzt "System" die voreingestellte Kodierung des Betriebssystems. 
++Es ist sicherer eine explizite Kodierung anzugeben, wenn das QGIS-Projekt portierbar sein muß.
++</p>
++<h5>Dateiformat festlegen</h5>
++<p>Folgende Dateiformat sind verfügbar:
++<ul>
++    <li>CSV-Dateiformat.  Dies ist ein Format, das üblicherweise von Tabellenkalkulationen benutzt wird. Hier sind die Felder durch ein Komma begrenzt und durch das Anführungszeichen " umschlossen.  Zwischen den Anführungszeichen wird ein Anführungszeichen durch "" eingegeben.</li>
++    <li>Gewählte Trennzeichen.  Jeder Datensatz wird durch ein oder mehrere Trennzeichen in Felder ausgeteilt.
++    Anführungszeichen werden für Felder verwendet, die Trennzeichen enthalten können.  Ausnahmezeichen könnten verwendet werden, um das darauffolgenden Zeichen als normales Zeichen (um Trennzeichen, Anführungszeichen und Zeilenumbrüche in Textfelden anzugeben).  Die Verwendung von Trenn-, Anführungs- und Ausnahmezeichen ist  <a href="#csv">unten</a> näher ausgeführt.
++    <li>Regulärer Ausdruck.  Jede Zeile wird mit "regulären Ausdrücken" als Trennzeichen in Felder aufgeteilt.
++    Der Verwendung von regulären Ausdrücken ist <a href="#regexp">unten</a> näher ausgeführt.
++</ul>
++<h5>Datensatz und Feldoptionen</h5>
++<p>Die folgenden Optionen beeinflussen die Auswahl von Datensätzen und Feldern aus der Datei</p>
++<ul>
++    <li>Anzahl der zu überspringenden führenden Zeilen: um führende Zeilen zu ignorieren</li>
++    <li>Erster Datensatz enthält Feldnamen: wenn gewählt wird die erste Zeile (nach den ignorierten Zeilen) als Feldnamenzeile statt Datenzeile interpretiert.</li>
++    <li>Felder kürzen: wenn gewählt, werden führende und schließende Leerzeichen abgeschnitten (außer für Felder in Anführungszeichen).</li>
++    <li>Leere Felder verwerfen: wenn gewählt, werden leere Felder (nach Kürzung) verworfen.  Dies beeinflußt die Zurordnung der Daten zu Feldern und entspricht der Behandlung von aufeinanderfolgenden Trennzeichen als ein Trennzeichen.  Felder in Anführungszeichen werden nie verworfen.</li>
++    <li>Dezimaltrennzeichen ist Komma: wenn gewählt, werden Kommata statt Punkte als Dezimaltrennzeichen in Fließkommazahlen verwendet.  Beispiel <tt>-51,354</tt> entspricht -51.354.
++    </li>
++</ul>
++<h5>Geometrie-Definition</h5>
++<p>Folgende Geometriedefinitionen sind verfügbar:</p>
++<ul>
++    <li>Punktkoordinaten: jedes Objekt wird als durch X- und Y-Koordinaten repräsentiert.</li>
++    <li>Well-Known-Text-Geometrie (WKT): jedes Objekt wird durch eine WKT-Zeichenkette repräsentiert, z.B.
++    <tt>POINT(1.525622 51.20836)</tt>.  Siehe <a href="#wkt">Well-Known-Text</a>-Format.
++    <li>Keine Geometrie (Nur Attributtabelle): Datensätze werden nicht in der Karte angezeigt, können aber in der Attributtabelle angezeigt und mit anderen Tabellen in QGIS verknüpft werden.</li>
++</ul>
++<p>Für Punktkoordinaten gelten folgenden Einstellungen:</p>
++<ul>
++    <li>X-Feld: gibt das Feld an, das die X-Koordinate enthält</li>
++    <li>Y Feld: gibt das Feld an, das die Y-Koordinate enthält</li>
++    <li>DMS-Winkel: wenn gewählt, werden Koordinaten in Grad/Minute/Sekunde oder Grad/Minute repräsentiert. QGIS ist bei der Interpretation von Grad/Minuten/Sekunden ser nachsichtig. Eine gültige DMS-Koordinaten enthält drei numerische Felder mit einem optionalen Hemisphärenpräfix oder -suffix (N, E oder + sind positiv, S, W oder - sind  negativ).  Weitere nicht numerische Zeichen werden verworfen.  Z.B. ist <tt>N41d54'01.54"</tt> eine gültige Koordinate.
++    </li>
++</ul>
++<p>Für Well-Known-Text-Geometrien gelten folgende Einstellungen:</p>
++<ul>
++    <li>Geometriefeld: das Feld, dass die Well-Known-Text-Definition enthält.</li>
++    <li>Geometrietyp: "Bestimmen" (bestimmen), "Punkt", "Linie", oder "Polygon". QGIS-Layer können nur einen Geometrietyp ( Punkt, Linie oder Polygon) darstellen. Diese Einstellung legt fest welcher Geometrietyp angezeigt wird, wenn eine Datei mehrere Geometrietypen enthält. Datensätze die davon abweichen werden verworfen. Wenn "Bestimmen" gewählt ist, wird der Geometrietyp der ersten Geometrie der Datei verwendet.
++    "Punkt" umfaßt POINT und MULTIPOINT WKT-Typen, "Line" umfaßt LINESTRING und MULTLINESTRING WKT-Typen und "Polygon" umfaßt POLYGON und MULTIPOLYGON WKT-Typen.
++</ul>
++<h5>Layereinstellungen</h5>
++<p>Layereinstellungen steuern wie ein Layer in QGIS behandelt wird.  Folgende Einstellungen sind verfügbar:</p>
++<ul>
++<li>Räumlichen Index nutzen. Einen räumlichen Index erzeugen, der die Anzeige- und räumliche Auswahlgeschwindigkeit verbessert.
++Diese Option kann für Dateien sinnvoll sein, deren Größe einige MB übersteigt.</li>
++<li>Untermengen-Index nutzen. Einen Index erzeugen, wenn eine Untermenge verwendet wird (entweder durch die Angabe eines Filters in den Layereigenschaftendialog oder implizite Untermenge, wenn nicht alle Geometrien gültig sind).  Der Index wird nur erzeugt, wenn eine Untermenge definiert ist.</li>
++<li>Datei überwachen.  Wenn dies eingestellt ist, überwacht QGIS die Datei auf Änderungen durch Applikationen und läd sie neue, wenn es geändert wird.  Die Karte wird nicht neugezeichnet bis der Benutzer sie aktualisiert, aber Indizes und Ausmaße werden neugeladen.  Diese Option sollte gewählt werden, wenn Indizes benutzt werden und es wahrscheinlich ist, dass anderen Applikationen die Datei ändern.</li>
++</ul>
++
++<h4><a name="csv">Wie Trenn-, Anführungs- und Ausnahmezeichen verwendet werden</a></h4>
++<p>Datensätze werden durch drei Zeichenarten in Felder aufgeteilt: 
++Trenn-, Anführungs- und Ausnahmezeichen.  
++Andere Zeichen im Datensatz werden als Daten betrachtet und durch Trennzeichen in Felder aufgeteilt. Anführungszeichen treten gepaart auf und bewriken das der Text dazwischen wie Daten behandelt wird.  Ausnahmezeichen bewirken, dass darauffolgede Zeichen als Daten behandelt werden.   
++</p>
++<p>
++Anführungs- und Ausnahmezeichen dürfen keine Trennzeichen sein - sie werden ignoriert, wenn sie es sind. Ausnahmezeichen können auch Anführungszeichen sein, verhalten sich aber unterschiedlich, wenn sie es sind.</p>
++<p>Trennzeichen markieren die Feldenden.  Wenn mehr als ein Trennzeichen definiert ist, kann ein jedes das Feldende markieren. Die Anführungs- und Ausnahmezeichen   übersteuern das Trennzeichen, sodaß es als normales Datenzeichen behandelt wird.</p>
++<p>Anführungszeichen können verwendet werden, um den Anfang und das Ende von Feldern zu markieren. Solche Felder können Trennzeichen enthalten und über mehrere Zeilen der Textdatei gehen. Wenn ein Feld in Anführungszeichen steht müssen die Anführungszeichen an beiden Ende übereinstimmen. Anführungszeichen für nicht in einem vorkommen außer sie sind mit einem Ausnahmezeichen versehen.</p>
++<p>Ausnahmezeichen, die keine Anführungszeichen sind sorgen dafür, dass das folgende Zeichen als Datenzeichen behandelt wird (d.h. nicht mehr als Zeilenumbruch, Trenn- oder Anführungszeichen behandelt wird).  
++</p>
++<p>Ausnahmezeichen, die auch Anführungszeichen sind, haben einen sehr viel begrenzden Effekt.  Sie wirken nur innerhalb von Anführungszeichen und nehme nur sich selbst aus. Wenn beispielsweise 
++<tt>'</tt> ein Anführungs- und Ausnahmezeichen ist, repräsentiert die Zeichenkette
++<tt>'Smith''s&nbsp;Creek'</tt> den Wert Smith's&nbsp;Creek.
++</p>
++
++
++<h4><a name="regexp">Wie reguläre Ausdrücke funktionieren</a></h4>
++<p>Reguläre Ausdrücke sind eine Minisprache um Zeichenmuster auszudrücken.  Es gibt viele Syntaxvarianten für reguläre Ausdrücke - QGIS nutzt die Syntax der Klasse <a href="http://qt-project.org/doc/qt-4.8/qregexp.html">QRegExp</a> des <a href="http://qt.digia.com">Qt</a> Frameworks.</p>
++<p>In einer durch regulären Ausdruck getrennten Datei wird jede Zeile als Datensatz behandelt.  Jeder Treffer des regulären Ausdrucks in der Zeile wird als Feldende behandelt. Wenn der reguläre Ausdruck Erfassungsgruppen (engl. capture groups; z.B. <tt>(cat|dog)</tt>) enthält werden diese als Felder extrahiert. Wenn dies nicht gewünscht ist, sollten Nicht-Erfassungsgruppen (z.B. <tt>(?:cat|dog)</tt>) verwendet werden.
++</p>
++<p>Der reguläre Ausdruck wird anders behandelt, wenn es sich auf den Anfang der Zeile bezieht (d.h, wenn das Muster mit <tt>^</tt> beginnt).
++In diesem Fall wird der Ausdruck auf jede Zeile angewendet. Wenn die Zeile kein Treffer ist, wird sie als ungültige Datensatz verworfen.  Jede Erfassungsgruppe im Ausdruck wird als Feld behandelt.  Der reguläre Ausdruck ist ungültig, wenn er keine Erfassungsgruppen enthält.  Zum Beispiel kann folgendes als ein (etwas uneingängiges) Mittel zum Laden von Daten mit festen Feldbreite verwendet werden:
++<pre>
++^(.{5})(.{10})(.{20})(.{20})
++</pre>
++<p>extrahiert vier Felder der Breiten 5, 10, 20 und 20 Zeichen einer jeden Zeile.  
++Zeilen mit weniger als 55 Zeichen werden verworfen.
++</p>
++
++
++<h4><a name="wkt">Wie WKT-Texte interpretiert werden</a></h4>
++<p>
++Ein getrennter Textlayer erkennt folgende <a href="http://en.wikipedia.org/wiki/Well-known_text">Well-Known-Text</a>-Typen - 
++<tt>POINT</tt>, <tt>MULTIPOINT</tt>, <tt>LINESTRING</tt>, <tt>MULTILINESTRING</tt>, <tt>POLYGON</tt>, and <tt>MULTIPOLYGON</tt>.  
++Es akzeptiert Geometrien mit einer Z-Koordinate (z.B. <tt>POINT&nbsp;Z</tt>), eine Messung (<tt>POINT&nbsp;M</tt>) oder beides (<tt>POINT&nbsp;ZM</tt>).
++</p>
++<p>
++Es unterstützt auch die PostGIS-EWKT-Variante, in der die Geometrie mit einer räumlichen Referenzsystem-ID eingeleitet wird (z.B. <tt>SRID=4326;POINT(175.3&nbsp;41.2)</tt>) und die Informix-Variante in der eine WKT nur mit einer ganzzahligen räumlichen Referenzsystem-ID eingeleitet wird (z.B. <tt>1 POINT(175.3&nbsp;41.2)</tt>).
++In beiden Fällen wird die SRID ignoriert.
++</p>
++
++
++
++<h4><a name="attributes">Attribute in getrennten Textdateien</a></h4> 
++<p>Jeder Datensatz wird in Felder aufgeteilt, die die Attribute des Datensatzes repräsentieren.  Normalerweise werden die Attributname der ersten Zeile entnommen.  Wenn sie keine Feldnamen enthält werden sie mit <tt>field_1</tt>, <tt>field_2</tt> usw. benannt.  
++Auch wenn es mehr Datensätzen mehr Felder als die in der Kopfzeile definierten hat, werden diese mit <tt>field_#</tt> benannt, wobei # die Feldnummer ist (zu beachten ist, das leere Felder am Ende des Datensatzes ignoriert werden).
++QGIS kann andere Feldnamen verwenden, wenn die Namen in der Textdateien Zahlen sind oder Namen wie <tt>field_#</tt> haben oder doppelt vorkommen.
++</p>
++<p>
++Zusätzlich zu den Attributen, die explizit in der Datei vorkommen, vergibt QGIS jedem Datensatz die Zeilennummer in der er beginnt als eindeutige Objektkennung.  
++</p>
++<p>
++Jedes Attribut hat auch einen Datentyp aus Zeichenkette (String, Text), ganzer Zahl oder Fließkommazahl.
++Der Datentyp wird aus dem Inhalt des Felds hergeleitet -wenn jeder nicht leere Wert eine ganze Zahl ist der Feldtyp Ganzzahl, wenn er eine gültige Fließkommazahl ist, ist der Feldtype Fließkommazahl und sonst ist der Typ Zeichenkette .  Zu beachten ist, das dies auf den Inhalten der Felder basiert, Anführungszeichen beeinflußen die Interpretation der Werte nicht.
++</p>
++
++
++<h4><a name="example">Beispiel für eine Textdatei mit X-,Y-Punktkoordinaten</a></h4> 
++<pre>
++X;Y;ELEV
++-300120;7689960;13
++-654360;7562040;52
++1640;7512840;3
++</pre>
++<p>Die Datei:</p>
++<ul>
++<li> benutzt <b>;</b> als Trennzeichen. Jedes Zeichen kann als Trennzeichen für Felder verwendet werden.</li>
++<li>Die erste Zeile ist die Kopfzeile. Es enthält die Feldnamen X, Y und ELEV.</li>
++<li>Die X-Koordinaten stehen im Feld X.</li>
++<li>Die Y Koordinaten stehen im Feld Y.</li>
++</ul>
++<h4><a name="wkt_example">Beispiel für eine Textdatei mit WKT-Geometrien</a></h4>
++<pre>
++id|wkt
++1|POINT(172.0702250 -43.6031036)
++2|POINT(172.0702250 -43.6031036)
++3|POINT(172.1543206 -43.5731302)
++4|POINT(171.9282585 -43.5493308)
++5|POINT(171.8827359 -43.5875983)
++</pre>
++<p>Diese Datei</p>
++<ul>
++  <li>hat zwei Felder in der Kopfzeile: id und wkt.
++  <li>nutzt <b>|</b> als Trennzeichen.</li>
++  <li>gibt jeden Punkt in WKT-Notation an
++</ul>
++
++<h4><a name="python">Getrennte Textlayer mit Python verwenden</a></h4>
++<p>Getrennte Textlayerdatenquellen können mit Python in ähnlicher Weise wie andere Vektorlayer erzeugt werden.
++Das Muster ist:
++</p>
++<pre>
++from PyQt4.QtCore import QUrl, QString
++from qgis.core import QgsVectorLayer, QgsMapLayerRegistry
++
++# Define the data source
++filename="test.csv"
++uri=QUrl.fromLocalFile(filename)
++uri.addQueryItem("type","csv")
++uri.addQueryItem("delimiter","|")
++uri.addQueryItem("wktField","wkt")
++# ... other delimited text parameters
++layer=QgsVectorLayer(QString(uri.toEncoded()),"Test CSV layer","delimitedtext")
++# Add the layer to the map
++if layer.isValid():
++    QgsMapLayerRegistry.instance().addMapLayer( layer )
++</pre>
++<p>Dies könnte zum Laden des <a href="#wkt_example">zweiten</a> Beispiels oben verwendet werden.</p>
++<p>Die Konfiguration wird durch die Query-Items in der URI festgelegt.
++Die folgenden Optionen können verwendet werden
++</p>
++<ul>
++    <li><tt>encoding=..</tt> legt die Dateikodierung fest.  Voreingestellt ist "UTF-8"</li>
++    <li><tt>type=(csv|regexp|whitespace)</tt> legt den Trennzeichentyp fest.  Gültige Werte sind  csv, 
++       regexp, und whitespace (das nur ein Sonderfall von regexp ist).  Voreingestellt ist csv.</li>
++       <li><tt>delimiter=...</tt> legt das Trennzeichen, das für CSV oder regexp formatierte Dateien verwendet wird, fest.  Voreingestellt ist CSV-Dateien ist <tt>,</tt>.  Für regexp gibt es keine Voreinstellung.</li>
++       <li><tt>quote=..</tt> (für CSV-Dateien) legt die Anführungszeichen fest. Voreingestellt ist "</li>
++       <li><tt>escape=..</tt> (für CSV-Dateien) legt Ausnahmezeichen fest, das das folgende Zeichen von ihrer Sonderbedeutung ausnimmt. Voreingestellt ist "</li>
++       <li><tt>skipLines=#</tt> legt die Anzahl der Zeilen fest, die am Anfang der Datei übersprungen werden sollen. Voreingestellt ist 0.</li>
++       <li><tt>useHeader=(yes|no)</tt> legt fest, ob der erste Datensatz Feldnamen enthält. Voreingestellt ist yes.</li>
++       <li><tt>trimFields=(yes|no)</tt> legt fest, ob führende oder schließende Leerzeichen abgeschnitten von nicht mit Anführungszeichen umschlossenen Felder abgeschnitten werden sollen. Voreingestellt ist no.</li>
++       <li><tt>maxFields=#</tt> legt die Feldhöchstzahl fest, die aus der Datei geladen werden. Weitere Felder in den Datensätzen werden verworfen.Voreingestellt ist 0 - alle Felder einschließen
++       (Diese Option ist in der Dialogbox nicht vorhanden).</li>
++       <li><tt>skipEmptyFields=(yes|no)</tt> legt fest, ob leere nicht in Anführungszeichen stehende Felder verworfen werden (angewendet nach trimFields). Voreingestellt ist no.</li>
++       <li><tt>decimalPoint=.</tt> legt einen alternatives Zeichen als Dezimaltrennerzeichen in numerischen Feldern fest.  Voreingestellt ist Punkt (<tt>.</tt>).</li>
++       <li><tt>wktField=feldname</tt> legt den Namen oder die Feldnummer (beginnend mit 1) des Feldes fest, das eine WKT-Geometrie enthält</li>
++       <li><tt>xField=feldname</tt> legt den Name oder die Feldnummer (beginnend mit 1) des Feldes fest, das die X-Koordinate enthält (gilt nur, wenn kein wktField angegeben ist)</li>
++       <li><tt>yField=feldname</tt> legt den Name oder die Feldnummer (beginnend mit 1) des Feldes fest, das die Y-Koordinate enthält (gilt nur, wenn kein wktField angegeben ist)</li>
++       <li><tt>geomType=(auto|point|line|polygon|none)</tt> legt den Geometrietyp der WKT-Felder an oder <tt>none</t>, um nur die Attributtabelle zu laden.  Voreingestellt ist auto.</li>
++       <li><tt>subset=expression</tt> legt einen Ausdruck fest, der die zu verwendende Untermenge der Datensätze identifiziert.</li>
++       <li><tt>crs=...</tt> legt das zu verwendende Koordinatensystem des Vektorlayers in einem durch QgsCoordinateReferenceSystem.createFromString (z.B. "EPSG:4167") akzeptierten Formats fest.  Wenn dies nicht angegeben ist, kann die ein Dialog diese vom Benutzer erfragen (abhängig von der QGIS-KBS-Einstellung)</li>
++       <li><tt>subsetIndex=(yes|no)</tt> legt fest, das der Datenlieferanz einen Index beim ersten Laden aufbauen soll, um die Untermenge festzulegen.  Der Index kommt bei explizit definierten Untermengen und implizite Untermenge mit gültigen Geometrien zu Anwendung.  Voreingestellt ist, dass der Index, wenn möglicht erstellt wird.</li>
++       <li><tt>spatialIndex=(yes|no)</tt> legt fest, das ein räumlicher Index beim ersten Lesen der Datei erstellt werden soll.  Voreingestellt ist, dass kein Index erstellt wird. </li>
++       <li><tt>watchFile=(yes|no)</tt> legt fest, dass der Datenlieferant das Dateisystem auf Dateiänderungen überwachen soll.</li>
++       <li><tt>quiet=(yes|no)</tt> legt fest, ob Fehler beim Laden des Layers in einem Dialog angezeigt werden sollen (in jedem Fall werden sie in QGIS-Protokoll geschrieben). Voreingestellt ist no.  Diese Option ist in der Oberfläche nicht verfügbar</li>
++</ul></translation>
++    </message>
+ </context>
+ <context>
+     <name>contour</name>
+@@ -56157,7 +56782,11 @@ Erweiterung wird nicht aktiviert.</trans
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Filled</source>
++        <translation>Gefüllt</translation>
+     </message>
+ </context>
+ <context>
+@@ -60861,7 +61490,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>xyz</source>
++        <translation>xyz</translation>
+     </message>
+ </context>
+ <context>
+@@ -60888,6 +61521,10 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Pyramidized</source>
+         <translation>Ausgabelayer</translation>
+     </message>
+ </context>
+@@ -62713,7 +63350,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Hillshade</source>
++        <translation>Schummerung</translation>
+     </message>
+ </context>
+ <context>
+@@ -63701,7 +64342,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Merged</source>
++        <translation>Verschmolzen</translation>
+     </message>
+ </context>
+ <context>
+@@ -63720,7 +64365,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Nearblack</source>
++        <translation>Fast-Schwarz</translation>
+     </message>
+ </context>
+ <context>
+@@ -63819,7 +64468,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>PCT to RGB</source>
++        <translation>PCT nach RGB</translation>
+     </message>
+ </context>
+ <context>
+@@ -63834,7 +64487,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Vectorized</source>
++        <translation>Vektorisiert</translation>
+     </message>
+ </context>
+ <context>
+@@ -63869,7 +64526,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Distance</source>
++        <translation>Entfernung</translation>
+     </message>
+ </context>
+ <context>
+@@ -63884,7 +64545,7 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Write values inside an existing raster layer(*)</source>
+-        <translation>Werte in einen vorhandenen Rasterlayer(*) eintragen </translation>
++        <translation type="obsolete">Werte in einen vorhandenen Rasterlayer(*) eintragen </translation>
+     </message>
+     <message>
+         <source>Set output raster size (ignored if above option is checked)</source>
+@@ -63904,7 +64565,7 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer: mandatory to choose an existing raster layer if the (*) option is selected</source>
+-        <translation>Ausgabelayer: Auswahl eines vorhandenen Rasters zwingend, wenn (*)  Option gewählt ist</translation>
++        <translation type="obsolete">Ausgabelayer: Auswahl eines vorhandenen Rasters zwingend, wenn (*)  Option gewählt ist</translation>
+     </message>
+     <message>
+         <source>Nodata value</source>
+@@ -63936,8 +64597,16 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Force the generation of an associated ESRI world file (.tfw))</source>
++        <translation type="obsolete">Erzeugung der zugehörigen ESRI-Worlddatei (.tfw) erzwingen</translation>
++    </message>
++    <message>
++        <source>Force the generation of an associated ESRI world file (.tfw)</source>
+         <translation>Erzeugung der zugehörigen ESRI-Worlddatei (.tfw) erzwingen</translation>
+     </message>
++    <message>
++        <source>Rasterized</source>
++        <translation>Gerastert</translation>
++    </message>
+ </context>
+ <context>
+     <name>rgb2pct</name>
+@@ -63951,7 +64620,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>RGB to PCT</source>
++        <translation>RGB nach PCT</translation>
+     </message>
+ </context>
+ <context>
+@@ -63970,7 +64643,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Roughness</source>
++        <translation>Rauhigkeit</translation>
+     </message>
+ </context>
+ <context>
+@@ -64059,7 +64736,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
++    </message>
++    <message>
++        <source>Sieved</source>
++        <translation>Gesiebt</translation>
+     </message>
+ </context>
+ <context>
+@@ -64090,7 +64771,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Slope</source>
++        <translation>Neigung</translation>
+     </message>
+ </context>
+ <context>
+@@ -64248,7 +64933,11 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Ausgabedatei</translation>
++        <translation type="obsolete">Ausgabedatei</translation>
++    </message>
++    <message>
++        <source>Topographic Position Index</source>
++        <translation>Topographischer Positionsindex</translation>
+     </message>
+ </context>
+ <context>
+@@ -64291,7 +64980,7 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
+     </message>
+     <message>
+         <source>Nodata value, leave blank to take the nodata value from input</source>
+@@ -64325,6 +65014,10 @@ Formatiert ein Datum oder eine Zeichenke
+         <source>Force the generation of an associated ESRI world file (.tfw))</source>
+         <translation>Erzeugung der zugehörigen ESRI-Worlddatei (.tfw) erzwingen</translation>
+     </message>
++    <message>
++        <source>Translated</source>
++        <translation>Umgewandelt</translation>
++    </message>
+ </context>
+ <context>
+     <name>tri</name>
+@@ -64522,7 +65215,7 @@ Formatiert ein Datum oder eine Zeichenke
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Ausgabelayer</translation>
++        <translation type="obsolete">Ausgabelayer</translation>
+     </message>
+     <message>
+         <source>Nodata value, leave blank to take the nodata value from input</source>
+@@ -64556,5 +65249,9 @@ Formatiert ein Datum oder eine Zeichenke
+         <source>Force the generation of an associated ESRI world file (.tfw))</source>
+         <translation>Erzeugung der zugehörigen ESRI-Worlddatei (.tfw) erzwingen</translation>
+     </message>
++    <message>
++        <source>Warped</source>
++        <translation>Entzerrt</translation>
++    </message>
+ </context>
+ </TS>
+--- a/i18n/qgis_en.ts
++++ b/i18n/qgis_en.ts
+@@ -635,12 +635,16 @@ Open the results dialog to check it.</tr
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
+     </message>
+     <message>
+         <source>Nodata value, leave blank to take the nodata value from input</source>
+         <translation>Nodata value, leave blank to take the nodata value from input</translation>
+     </message>
++    <message>
++        <source>Clipped</source>
++        <translation type="unfinished">Clipped</translation>
++    </message>
+ </context>
+ <context>
+     <name>ClipByMask</name>
+@@ -743,7 +747,11 @@ Open the results dialog to check it.</tr
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Color relief</source>
++        <translation type="unfinished">Color relief</translation>
+     </message>
+ </context>
+ <context>
+@@ -3196,6 +3204,45 @@ Are you sure you want to proceed?</trans
+     </message>
+ </context>
+ <context>
++    <name>DinfDistDownMulti</name>
++    <message>
++        <source>D-Infinity Flow Direction Grid</source>
++        <translation type="unfinished">D-Infinity Flow Direction Grid</translation>
++    </message>
++    <message>
++        <source>Pit Filled Elevation Grid</source>
++        <translation type="unfinished">Pit Filled Elevation Grid</translation>
++    </message>
++    <message>
++        <source>Stream Raster Grid</source>
++        <translation type="unfinished">Stream Raster Grid</translation>
++    </message>
++    <message>
++        <source>Weight Path Grid</source>
++        <translation type="unfinished">Weight Path Grid</translation>
++    </message>
++    <message>
++        <source>Statistical Method</source>
++        <translation type="unfinished">Statistical Method</translation>
++    </message>
++    <message>
++        <source>Distance Method</source>
++        <translation type="unfinished">Distance Method</translation>
++    </message>
++    <message>
++        <source>Check for edge contamination</source>
++        <translation type="unfinished">Check for edge contamination</translation>
++    </message>
++    <message>
++        <source>D-Infinity Drop to Stream Grid</source>
++        <translation type="unfinished">D-Infinity Drop to Stream Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>DinfDistUp</name>
+     <message>
+         <source>D-Infinity Flow Direction Grid</source>
+@@ -3235,6 +3282,45 @@ Are you sure you want to proceed?</trans
+     </message>
+ </context>
+ <context>
++    <name>DinfDistUpMulti</name>
++    <message>
++        <source>D-Infinity Flow Direction Grid</source>
++        <translation type="unfinished">D-Infinity Flow Direction Grid</translation>
++    </message>
++    <message>
++        <source>Pit Filled Elevation Grid</source>
++        <translation type="unfinished">Pit Filled Elevation Grid</translation>
++    </message>
++    <message>
++        <source>Slope Grid</source>
++        <translation type="unfinished">Slope Grid</translation>
++    </message>
++    <message>
++        <source>Statistical Method</source>
++        <translation type="unfinished">Statistical Method</translation>
++    </message>
++    <message>
++        <source>Distance Method</source>
++        <translation type="unfinished">Distance Method</translation>
++    </message>
++    <message>
++        <source>Proportion Threshold</source>
++        <translation type="unfinished">Proportion Threshold</translation>
++    </message>
++    <message>
++        <source>Check for edge contamination</source>
++        <translation type="unfinished">Check for edge contamination</translation>
++    </message>
++    <message>
++        <source>D-Infinity Distance Up</source>
++        <translation type="unfinished">D-Infinity Distance Up</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>DinfTransLimAccum</name>
+     <message>
+         <source>D-Infinity Flow Direction Grid</source>
+@@ -3313,6 +3399,84 @@ Are you sure you want to proceed?</trans
+     </message>
+ </context>
+ <context>
++    <name>DinfTransLimAccum2Multi</name>
++    <message>
++        <source>D-Infinity Flow Direction Grid</source>
++        <translation type="unfinished">D-Infinity Flow Direction Grid</translation>
++    </message>
++    <message>
++        <source>Supply Grid</source>
++        <translation type="unfinished">Supply Grid</translation>
++    </message>
++    <message>
++        <source>Transport Capacity Grid</source>
++        <translation type="unfinished">Transport Capacity Grid</translation>
++    </message>
++    <message>
++        <source>Input Concentration Grid</source>
++        <translation type="unfinished">Input Concentration Grid</translation>
++    </message>
++    <message>
++        <source>Outlets Shapefile</source>
++        <translation type="unfinished">Outlets Shapefile</translation>
++    </message>
++    <message>
++        <source>Check for edge contamination</source>
++        <translation type="unfinished">Check for edge contamination</translation>
++    </message>
++    <message>
++        <source>Transport Limited Accumulation Grid</source>
++        <translation type="unfinished">Transport Limited Accumulation Grid</translation>
++    </message>
++    <message>
++        <source>Deposition Grid</source>
++        <translation type="unfinished">Deposition Grid</translation>
++    </message>
++    <message>
++        <source>Output Concentration Grid</source>
++        <translation type="unfinished">Output Concentration Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
++    <name>DinfTransLimAccumMulti</name>
++    <message>
++        <source>D-Infinity Flow Direction Grid</source>
++        <translation type="unfinished">D-Infinity Flow Direction Grid</translation>
++    </message>
++    <message>
++        <source>Supply Grid</source>
++        <translation type="unfinished">Supply Grid</translation>
++    </message>
++    <message>
++        <source>Transport Capacity Grid</source>
++        <translation type="unfinished">Transport Capacity Grid</translation>
++    </message>
++    <message>
++        <source>Outlets Shapefile</source>
++        <translation type="unfinished">Outlets Shapefile</translation>
++    </message>
++    <message>
++        <source>Check for edge contamination</source>
++        <translation type="unfinished">Check for edge contamination</translation>
++    </message>
++    <message>
++        <source>Transport Limited Accumulation Grid</source>
++        <translation type="unfinished">Transport Limited Accumulation Grid</translation>
++    </message>
++    <message>
++        <source>Deposition Grid</source>
++        <translation type="unfinished">Deposition Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>Dissolve</name>
+     <message>
+         <source>Geometry exception while dissolving</source>
+@@ -3948,6 +4112,53 @@ geometry column - column with unique int
+     </message>
+ </context>
+ <context>
++    <name>DropAnalysisMulti</name>
++    <message>
++        <source>D8 Contributing Area Grid</source>
++        <translation type="unfinished">D8 Contributing Area Grid</translation>
++    </message>
++    <message>
++        <source>D8 Flow Direction Grid</source>
++        <translation type="unfinished">D8 Flow Direction Grid</translation>
++    </message>
++    <message>
++        <source>Pit Filled Elevation Grid</source>
++        <translation type="unfinished">Pit Filled Elevation Grid</translation>
++    </message>
++    <message>
++        <source>Accumulated Stream Source Grid</source>
++        <translation type="unfinished">Accumulated Stream Source Grid</translation>
++    </message>
++    <message>
++        <source>Outlets Shapefile</source>
++        <translation type="unfinished">Outlets Shapefile</translation>
++    </message>
++    <message>
++        <source>Minimum Threshold</source>
++        <translation type="unfinished">Minimum Threshold</translation>
++    </message>
++    <message>
++        <source>Maximum Threshold</source>
++        <translation type="unfinished">Maximum Threshold</translation>
++    </message>
++    <message>
++        <source>Number of Threshold Values</source>
++        <translation type="unfinished">Number of Threshold Values</translation>
++    </message>
++    <message>
++        <source>Spacing for Threshold Values</source>
++        <translation type="unfinished">Spacing for Threshold Values</translation>
++    </message>
++    <message>
++        <source>D-Infinity Drop to Stream Grid</source>
++        <translation type="unfinished">D-Infinity Drop to Stream Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>EditModelAction</name>
+     <message>
+         <source>Edit model</source>
+@@ -6808,7 +7019,7 @@ Please install it before running GRASS a
+     </message>
+     <message>
+         <source>Output</source>
+-        <translation>Output</translation>
++        <translation type="obsolete">Output</translation>
+     </message>
+     <message>
+         <source>Invalid grid spacing: %s/%s</source>
+@@ -6822,6 +7033,10 @@ Please install it before running GRASS a
+         <source>Vertical spacing is too small for the covered area</source>
+         <translation>Vertical spacing is too small for the covered area</translation>
+     </message>
++    <message>
++        <source>Grid</source>
++        <translation type="unfinished">Grid</translation>
++    </message>
+ </context>
+ <context>
+     <name>GridAverage</name>
+@@ -6859,7 +7074,11 @@ Please install it before running GRASS a
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Average</source>
++        <translation type="unfinished">Average</translation>
+     </message>
+ </context>
+ <context>
+@@ -6902,7 +7121,11 @@ Please install it before running GRASS a
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Interpolated metrics</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -6949,12 +7172,16 @@ Please install it before running GRASS a
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
+     </message>
+     <message>
+         <source>Smoothing</source>
+         <translation>Smoothing</translation>
+     </message>
++    <message>
++        <source>Interpolated IDW</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>GridMetrics</name>
+@@ -7031,7 +7258,11 @@ Please install it before running GRASS a
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Interpolated nearest neighbor</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -7070,6 +7301,41 @@ Please install it before running GRASS a
+     </message>
+ </context>
+ <context>
++    <name>GridNetMulti</name>
++    <message>
++        <source>D8 Flow Direction Grid</source>
++        <translation type="unfinished">D8 Flow Direction Grid</translation>
++    </message>
++    <message>
++        <source>Outlets Shapefile</source>
++        <translation type="unfinished">Outlets Shapefile</translation>
++    </message>
++    <message>
++        <source>Mask Grid</source>
++        <translation type="unfinished">Mask Grid</translation>
++    </message>
++    <message>
++        <source>Mask Threshold</source>
++        <translation type="unfinished">Mask Threshold</translation>
++    </message>
++    <message>
++        <source>Longest Upslope Length Grid</source>
++        <translation type="unfinished">Longest Upslope Length Grid</translation>
++    </message>
++    <message>
++        <source>Total Upslope Length Grid</source>
++        <translation type="unfinished">Total Upslope Length Grid</translation>
++    </message>
++    <message>
++        <source>Strahler Network Order Grid</source>
++        <translation type="unfinished">Strahler Network Order Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>GridSurfaceCreate</name>
+     <message>
+         <source>Input las layer</source>
+@@ -7566,6 +7832,10 @@ are stored on the installation folder</t
+         <source>Elevation</source>
+         <translation>Elevation</translation>
+     </message>
++    <message>
++        <source>Feature %d is smaller than raster cell size</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>ImportIntoPostGIS</name>
+@@ -7904,6 +8174,33 @@ Please configure it before running LASto
+     </message>
+ </context>
+ <context>
++    <name>LengthAreaMulti</name>
++    <message>
++        <source>Length Grid</source>
++        <translation type="unfinished">Length Grid</translation>
++    </message>
++    <message>
++        <source>Contributing Area Grid</source>
++        <translation type="unfinished">Contributing Area Grid</translation>
++    </message>
++    <message>
++        <source>Threshold</source>
++        <translation type="unfinished">Threshold</translation>
++    </message>
++    <message>
++        <source>Exponent</source>
++        <translation type="unfinished">Exponent</translation>
++    </message>
++    <message>
++        <source>Stream Source Grid</source>
++        <translation type="unfinished">Stream Source Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>LidarToolsAlgorithmProvider</name>
+     <message>
+         <source>LAStools folder</source>
+@@ -9455,6 +9752,10 @@ Acts on currently active editable layer<
+         <source>seconds</source>
+         <translation>seconds</translation>
+     </message>
++    <message>
++        <source>Record parsing error</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>ModelerAlgorithm</name>
+@@ -10595,6 +10896,33 @@ Please check the configuration in the Pr
+     </message>
+ </context>
+ <context>
++    <name>PeukerDouglasMulti</name>
++    <message>
++        <source>Elevation Grid</source>
++        <translation type="unfinished">Elevation Grid</translation>
++    </message>
++    <message>
++        <source>Center Smoothing Weight</source>
++        <translation type="unfinished">Center Smoothing Weight</translation>
++    </message>
++    <message>
++        <source>Side Smoothing Weight</source>
++        <translation type="unfinished">Side Smoothing Weight</translation>
++    </message>
++    <message>
++        <source>Diagonal Smoothing Weight</source>
++        <translation type="unfinished">Diagonal Smoothing Weight</translation>
++    </message>
++    <message>
++        <source>Stream Source Grid</source>
++        <translation type="unfinished">Stream Source Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>PointDistance</name>
+     <message>
+         <source>Input point layer</source>
+@@ -14137,7 +14465,7 @@ Response was:
+     </message>
+     <message>
+         <source>Fatal error occurred in GRASS library. QGIS gets over the error but any next fatal error will cause QGIS exit without warning. This is a problem of GRASS 7.0.0beta1 but it is fixed in GRASS 7.1 and higher. Error message: %1</source>
+-        <translation>Fatal error occurred in GRASS library. QGIS gets over the error but any next fatal error will cause QGIS exit without warning. This is a problem of GRASS 7.0.0beta1 but it is fixed in GRASS 7.1 and higher. Error message: %1</translation>
++        <translation type="obsolete">Fatal error occurred in GRASS library. QGIS gets over the error but any next fatal error will cause QGIS exit without warning. This is a problem of GRASS 7.0.0beta1 but it is fixed in GRASS 7.1 and higher. Error message: %1</translation>
+     </message>
+     <message>
+         <source>Raster image fill</source>
+@@ -16651,7 +16979,7 @@ Parser error:
+     </message>
+     <message>
+         <source>Attribute table - %1 :: Features total: %2, filtered: %3, selected: %4</source>
+-        <translation>Attribute table - %1 :: Features total: %2, filtered: %3, selected: %4</translation>
++        <translation type="obsolete">Attribute table - %1 :: Features total: %2, filtered: %3, selected: %4</translation>
+     </message>
+     <message>
+         <source>Update Filtered</source>
+@@ -16699,6 +17027,22 @@ Parser error:
+         <source>Update Selected</source>
+         <translation>Update Selected</translation>
+     </message>
++    <message>
++        <source>Ctrl+R</source>
++        <translation type="unfinished">Ctrl+R</translation>
++    </message>
++    <message>
++        <source>Show All Features In Initial Canvas Extent</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Attribute table - %1 :: Features total: %2, filtered: %3, selected: %4%5</source>
++        <translation type="unfinished">Attribute table - %1 :: Features total: %2, filtered: %3, selected: %4%5 {1 ?} {2,?} {3,?}</translation>
++    </message>
++    <message>
++        <source>, spatially limited</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsAttributeTableModel</name>
+@@ -24056,6 +24400,18 @@ not displayed</translation>
+         <source>The file has been updated by another application - reloading</source>
+         <translation>The file has been updated by another application - reloading</translation>
+     </message>
++    <message>
++        <source>Whole number (integer)</source>
++        <translation type="unfinished">Whole number (integer)</translation>
++    </message>
++    <message>
++        <source>Decimal number (double)</source>
++        <translation type="unfinished">Decimal number (double)</translation>
++    </message>
++    <message>
++        <source>Text, unlimited length (text)</source>
++        <translation type="unfinished">Text, unlimited length (text)</translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsDelimitedTextSourceSelect</name>
+@@ -29522,7 +29878,7 @@ at line %2 column %3</translation>
+     </message>
+     <message>
+         <source>Cannot activate grass</source>
+-        <translation>Cannot activate grass</translation>
++        <translation type="obsolete">Cannot activate grass</translation>
+     </message>
+ </context>
+ <context>
+@@ -33168,19 +33524,19 @@ This may be a problem in your network co
+     </message>
+     <message>
+         <source>Meters</source>
+-        <translation>Meters</translation>
++        <translation type="obsolete">Meters</translation>
+     </message>
+     <message>
+         <source>Feet</source>
+-        <translation>Feet</translation>
++        <translation type="obsolete">Feet</translation>
+     </message>
+     <message>
+         <source>Degrees</source>
+-        <translation>Degrees</translation>
++        <translation type="obsolete">Degrees</translation>
+     </message>
+     <message>
+         <source>Nautical Miles</source>
+-        <translation>Nautical Miles</translation>
++        <translation type="obsolete">Nautical Miles</translation>
+     </message>
+ </context>
+ <context>
+@@ -50264,6 +50620,33 @@ Problem with line %d</translation>
+     </message>
+ </context>
+ <context>
++    <name>SlopeAreaMulti</name>
++    <message>
++        <source>Slope Grid</source>
++        <translation type="unfinished">Slope Grid</translation>
++    </message>
++    <message>
++        <source>Contributing Area Grid</source>
++        <translation type="unfinished">Contributing Area Grid</translation>
++    </message>
++    <message>
++        <source>Slope Exponent</source>
++        <translation type="unfinished">Slope Exponent</translation>
++    </message>
++    <message>
++        <source>Area Exponent</source>
++        <translation type="unfinished">Area Exponent</translation>
++    </message>
++    <message>
++        <source>Slope Area Grid</source>
++        <translation type="unfinished">Slope Area Grid</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
++</context>
++<context>
+     <name>SpatialJoin</name>
+     <message>
+         <source>Target vector layer</source>
+@@ -50429,23 +50812,46 @@ Problem with line %d</translation>
+     <name>SymetricalDifference</name>
+     <message>
+         <source>Input layer</source>
+-        <translation>Input layer</translation>
++        <translation type="obsolete">Input layer</translation>
+     </message>
+     <message>
+         <source>Difference layer</source>
+-        <translation>Difference layer</translation>
++        <translation type="obsolete">Difference layer</translation>
+     </message>
+     <message>
+         <source>Symetrical difference</source>
+-        <translation>Symetrical difference</translation>
++        <translation type="obsolete">Symetrical difference</translation>
+     </message>
+     <message>
+         <source>Geometry exception while computing symetrical difference</source>
+-        <translation>Geometry exception while computing symetrical difference</translation>
++        <translation type="obsolete">Geometry exception while computing symetrical difference</translation>
+     </message>
+     <message>
+         <source>Feature exception while computing symetrical difference</source>
+-        <translation>Feature exception while computing symetrical difference</translation>
++        <translation type="obsolete">Feature exception while computing symetrical difference</translation>
++    </message>
++</context>
++<context>
++    <name>SymmetricalDifference</name>
++    <message>
++        <source>Input layer</source>
++        <translation type="unfinished">Input layer</translation>
++    </message>
++    <message>
++        <source>Difference layer</source>
++        <translation type="unfinished">Difference layer</translation>
++    </message>
++    <message>
++        <source>Symetrical difference</source>
++        <translation type="unfinished">Symetrical difference</translation>
++    </message>
++    <message>
++        <source>Geometry exception while computing symetrical difference</source>
++        <translation type="unfinished">Geometry exception while computing symetrical difference</translation>
++    </message>
++    <message>
++        <source>Feature exception while computing symetrical difference</source>
++        <translation type="unfinished">Feature exception while computing symetrical difference</translation>
+     </message>
+ </context>
+ <context>
+@@ -50483,6 +50889,36 @@ Problem with line %d</translation>
+         <source>TauDEM (hydrologic analysis)</source>
+         <translation>TauDEM (hydrologic analysis)</translation>
+     </message>
++    <message>
++        <source>TauDEM multifile command line tools folder</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Enable singlefile TauDEM tools</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Enable multifile TauDEM tools</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Could not open TauDEM algorithm %s:
++%s</source>
++        <translation type="unfinished"></translation>
++    </message>
++</context>
++<context>
++    <name>TauDEMMultifileAlgorithm</name>
++    <message>
++        <source>Could not load TauDEM algorithm: %s
++%s</source>
++        <translation type="unfinished">Could not load TauDEM algorithm: %s
++%s</translation>
++    </message>
++    <message>
++        <source>Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</source>
++        <translation type="unfinished">Wrong number of MPI processes used. Please set correct number before running TauDEM algorithms.</translation>
++    </message>
+ </context>
+ <context>
+     <name>TauDEMUtils</name>
+@@ -51905,7 +52341,11 @@ Problem with line %d</translation>
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Virtual</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -53910,7 +54350,7 @@ The following options can be added
+ 
+ 
+ </source>
+-        <translation><h3>Delimited Text File Layer</h3>
++        <translation type="obsolete"><h3>Delimited Text File Layer</h3>
+ Loads and displays delimited text files
+ <p>
+ <a href="#re">Overview</a><br/>
+@@ -54949,6 +55389,327 @@ When you toggle to edition the layer, a
+ To edit values, select the field to modify with the filter button on the left and fill the text box with the new value or an expression to calculate new value. Then, press <label>Update all</label> button to update all the rows of the attribute table or <label>Update selected</label> button if some features are selected or a filter is applied on the attribute table display. You can also use the <label>Expression builder</label> button to calculate the [...]
+ </translation>
+     </message>
++    <message>
++        <source><h3>Delimited Text File Layer</h3>
++Loads and displays delimited text files
++<p>
++<a href="#re">Overview</a><br/>
++<a href="#creating">Creating a delimited text layer</a><br/>
++<a href="#csv">How the delimiter, quote, and escape characters work</a><br />
++<a href="#regexp">How regular expression delimiters work</a><br />
++<a href="#wkt">How WKT text is interpreted</a><br />
++<a href="#attributes">Attributes in delimited text files</a><br />
++<a href="#example">Example of a text file with X,Y point coordinates</a><br/>
++<a href="#wkt_example">Example of a text file with WKT geometries</a><br/>
++<a href="#python">Using delimited text layers in Python</a><br/>
++</p>
++
++<h4><a name="re">Overview</a></h4>
++<p>A &quot;delimited text file&quot; contains data in which each record starts on a new line, and 
++is split into fields by a delimiter such as a comma.  
++This type of file is commonly exported from spreadsheets (for example CSV files) or databases.  
++Typically the first line of a delimited text file contains the names of the fields.  
++</p>
++<p>
++Delimited text files can be loaded into QGIS as a layer. 
++The records can be displayed spatially either as a point
++defined by X and Y coordinates, or using a Well Known Text (WKT) definition of a geometry which may
++describe points, lines, and polygons of arbitrary complexity.  The file can also be loaded as an attribute
++only table, which can then be joined to other tables in QGIS.
++</p>
++<p>
++In addition to the geometry definition the file can contain text, integer, and real number fields.  By default 
++QGIS will choose the type of field based on its the non blank values of the field.  If all can be interpreted
++as integer then the type will be integer, if all can be interpreted as real numbers then the type will
++be double, otherwise the type will be text.
++</p>
++<p>
++QGIS can also read the types from an OGR CSV driver compatible &quot;csvt&quot; file.  
++This is a file alongside the data file, but with a &quot;t&quot; appended to the file name. 
++The file should just contain one line which lists the type of each field. 
++Valid types are &quot;integer&quot;, &quot;long&quot;, &quot;longlong&quot;, &quot;real&quot;, 
++&quot;string&quot;, &quot;date&quot;, &quot;time&quot;, and &quot;datetime&quot;. 
++The date, time, and datetime types are treated as strings by the delimited text provider.
++Each type may be followed by a width and precision, for example &quot;real(10.4)&quot;.
++The list of types are separated by commas, regardless of the delimiter used in the data file.  An
++example of a valid format file would be:
++</p>
++
++<pre>
++&quot;integer&quot;,&quot;string&quot;,&quot;string(20)&quot;,&quot;real(20.4)&quot;
++</pre>
++
++<h4><a name="creating">Creating a delimited text layer</a></h4>
++<p>Creating a delimited text layer involves choosing the data file, defining the format (how each record is to
++be split into fields), and defining the geometry is represented.  
++This is managed with the delimited text dialog as detailed below.  
++The dialog box displays a sample from the beginning of the file which shows how the format
++options have been applied.
++</p>
++<h5>Choosing the data file</h5>
++<p>Use the &quot;Browse...&quot; button to select the data file.  Once the file is selected the
++layer name will automatically be populated based on the file name.  The layer name is used to represent
++the data in the QGIS legend.  
++</p>
++<p>
++By default files are assumed to be encoded as UTF-8.  However other file
++encodings can be selected.  For example &quot;System&quot; uses the default encoding for the operating system.  
++It is safer to use an explicit coding if the QGIS project needs to be portable.
++</p>
++<h5>Specifying the file format</h5>
++<p>The file format can be one of
++<ul>
++    <li>CSV file format.  This is a format commonly used by spreadsheets, in which fields are delimited
++    by a comma character, and quoted using a &quot;(quote) character.  Within quoted fields, a quote
++    mark is entered as &quot;&quot;.</li>
++    <li>Selected delimiters.  Each record is split into fields using one or more  delimiter character.
++    Quote characters are used for fields which may contain delimiters.  Escape characters may be used 
++    to treat the following character as a normal character (ie to include delimiter, quote, and 
++    new line characters in text fields).  The use of delimiter, quote, and escape characters is detailed <a href="#csv">below</a>.
++    <li>Regular expression.  Each line is split into fields using a &quot;regular expression&quot; delimiter.
++    The use of regular expressions is details <a href="#regexp">below</a>.
++</ul>
++<h5>Record and field options</h5>
++<p>The following options affect the selection of records and fields from the data file</p>
++<ul>
++    <li>Number of header lines to discard: used to ignore header lines at the beginning of the text file</li>
++    <li>First record has fields names: if selected then the first record in the file (after the discarded lines) is interpreted as names of fields, rather than as a data record.</li>
++    <li>Trim fields: if selected then leading and trailing whitespace characters will be removed from each field (except quoted fields). </li>
++    <li>Discard empty fields: if selected then empty fields (after trimming) will be discard.  This 
++    affects the alignment of data into fields and is equivalent to treating consecutive delimiters as a 
++    single delimiter.  Quoted fields are never discarded.</li>
++    <li>Decimal separator is comma: if selected then commas instead of points are used as the decimal separator in real numbers.  For
++    example <tt>-51,354</tt> is equivalent to -51.354.
++    </li>
++</ul>
++<h5>Geometry definition</h5>
++<p>The geometry is can be define as one of</p>
++<ul>
++    <li>Point coordinates: each feature is represented as a point defined by X and Y coordinates.</li>
++    <li>Well known text (WKT) geometry: each feature is represented as a well known text string, for example
++    <tt>POINT(1.525622 51.20836)</tt>.  See details of the <a href="#wkt">well known text</a> format.
++    <li>No geometry (attribute only table): records will not be displayed on the map, but can be viewed
++    in the attribute table and joined to other layers in QGIS</li>
++</ul>
++<p>For point coordinates the following options apply:</p>
++<ul>
++    <li>X field: specifies the field containing the X coordinate</li>
++    <li>Y field: specifies the field containing the Y coordinate</li>
++    <li>DMS angles: if selected coordinates are represented as degrees/minutes/seconds
++    or degrees/minutes.  QGIS is quite permissive in its interpretation of degrees/minutes/seconds.
++    A valid DMS coordinate will contain three numeric fields with an optional hemisphere prefix or suffix
++    (N, E, or + are positive, S, W, or - are negative).  Additional non numeric characters are 
++    generally discarded.  For example <tt>N41d54'01.54&quot;</tt> is a valid coordinate.
++    </li>
++</ul>
++<p>For well known text geometry the following options apply:</p>
++<ul>
++    <li>Geometry field: the field containing the well known text definition.</li>
++    <li>Geometry type: one of &quot;Detect&quot; (detect), &quot;Point&quot;, &quot;Line&quot;, or &quot;Polygon&quot;.
++    QGIS layers can only display one type of geometry feature (point, line, or polygon). This option selects
++    which geometry type is displayed in text files containing multiple geometry types. Records containing
++   other geometry types are discarded.   
++    If &quot;Detect&quot; is selected then the type of the first geometry in the file will be used.
++    &quot;Point&quot; includes POINT and MULTIPOINT WKT types, &quot;Line&quot; includes LINESTRING and
++    MULTLINESTRING WKT types, and &quot;Polygon&quot; includes POLYGON and MULTIPOLYGON WKT types.
++</ul>
++<h5>Layer settings</h5>
++<p>Layer settings control the way the layer is managed in QGIS.  The options available are:</p>
++<ul>
++<li>Use spatial index. Create a spatial index to improve the performance of displaying and selecting spatial objects.
++This option may be useful for files larger than a few megabytes in size.</li>
++<li>Use subset index. Create an index if a subset of records is being used (either by explicitly setting a subset string 
++from the layer properties dialog, or an implicit subset of features for which the geometry is valid in files
++for which all not geometries are valid).  The index will only be created when a subset is defined.</li>
++<li>Watch file.  If this options is selected QGIS will watch the file for changes by other applications, and 
++reload the file when it is changed.  The map will not be updated until refreshed by the user, but indexes and
++extents will be reloaded.  This option should be selected if indexes are used and it is likely that another
++application will change the file. </li>
++</ul>
++
++<h4><a name="csv">How the delimiter, quote, and escape characters work</a></h4>
++<p>Records are split into fields using three character sets: 
++delimiter characters, quote characters, and escape characters.  
++Other characters in the record are considered as data, split into
++fields by delimiter characters. 
++Quote characters occur in pairs and cause the text between them to be treated as a data.  Escape characters cause the character following them to be treated as data.   
++</p>
++<p>
++Quote and escape characters cannot be the same as delimiter characters - they
++will be ignored if they are. Escape characters can be the same as quote characters, but behave differently
++if they are.</p>
++<p>The delimiter characters are used to mark the end of each field.  If more than one delimiter character
++is defined then any one of the characters can mark the end of a field.  The quote and escape characters 
++can override the delimiter character, so that it is treated as a normal data character.</p>
++<p>Quote characters may be used to mark the beginning and end of quoted fields. Quoted fields can 
++contain delimiters and may span multiple lines in the text file.  If a field is quoted then it must
++start and end with the same quote character.  Quote characters cannot occur within a field unless they
++are escaped.</p>
++<p>Escape characters which are not quote characters force the following character to be treated as data.  
++(that is, to stop it being treated as a new line, delimiter, or quote character).  
++</p>
++<p>Escape characters that are also quote characters have much more limited effect.  They only apply within quotes and only escape themselves.  For example, if 
++<tt>'</tt> is a quote and escape character, then the string
++<tt>'Smith''s&nbsp;Creek'</tt> will represent the value Smith's&nbsp;Creek.
++</p>
++
++
++<h4><a name="regexp">How regular expression delimiters work</a></h4>
++<p>Regular expressions are mini-language used to represent character patterns.  There are many variations
++of regular expression syntax - QGIS uses the syntax provided by the <a href="http://qt-project.org/doc/qt-4.8/qregexp.html">QRegExp</a> class of the <a href="http://qt.digia.com">Qt</a> framework.</p>
++<p>In a regular expression delimited file each line is treated as a record.  Each match of the regular expression in the line is treated as the end of a field.  
++If the regular expression contains capture groups (eg <tt>(cat|dog)</tt>)
++ then these are extracted as fields. 
++ If this is not desired then use non-capturing groups (eg <tt>(?:cat|dog)</tt>).
++</p>
++<p>The regular expression is treated differently if it is anchored to the start of the line (that is, the pattern starts with <tt>^</tt>).
++In this case the regular expression is matched against each line.  If the line does not match it is discarded
++as an invalid record.  Each capture group in the expression is treated as a field.  The regular expression
++is invalid if it does not have capture groups.  As an example this can be used as a (somewhat 
++unintuitive) means of loading data with fixed width fields.  For example the 
++expression
++<pre>
++^(.{5})(.{10})(.{20})(.{20})
++</pre>
++<p>will extract four fields of widths 5, 10, 20, and 20 characters from each line.  
++Lines less than 55 characters long will be discarded.
++</p>
++
++
++<h4><a name="wkt">How WKT text is interpreted</a></h4>
++<p>
++The delimited text layer recognizes the following 
++<a href="http://en.wikipedia.org/wiki/Well-known_text">well known text</a> types - 
++<tt>POINT</tt>, <tt>MULTIPOINT</tt>, <tt>LINESTRING</tt>, <tt>MULTILINESTRING</tt>, <tt>POLYGON</tt>, and <tt>MULTIPOLYGON</tt>.  
++It will accept geometries with
++a Z coordinate (eg <tt>POINT&nbsp;Z</tt>), a measure (<tt>POINT&nbsp;M</tt>), or both (<tt>POINT&nbsp;ZM</tt>).
++</p>
++<p>
++It can also handle the PostGIS EWKT variation, in which the geometry is preceded by an spatial reference 
++system id (eg <tt>SRID=4326;POINT(175.3&nbsp;41.2)</tt>), and a variant used by Informix in which the WKT is 
++preceded by an integer spatial reference id (eg <tt>1 POINT(175.3&nbsp;41.2)</tt>).
++In both cases the SRID is ignored.
++</p>
++
++
++
++<h4><a name="attributes">Attributes in delimited text files</a></h4> 
++<p>Each record in the delimited text file is split into fields representing
++attributes of the record.  Usually the attribute names are taken from the first
++data record in the file.  However if this does not contain attribute names, then they will be named <tt>field_1</tt>, <tt>field_2</tt>, and so on.  
++Also if records have more fields than are defined in the header record then these
++will be named <tt>field_#</tt>, where # is the field number (note that empty fields at the end of a record are ignored).
++QGIS may override 
++the names in the text file if they are numbers, or have names like <tt>field_#</tt>,
++or are duplicated.
++</p>
++<p>
++In addition to the attributes explicitly in the data file QGIS assigns a unique 
++feature id to each record which is the line number in the source file on which
++the record starts.  
++</p>
++<p>
++Each attribute also has a data type, one of string (text), integer, longlong,
++or real number.
++The data type is inferred from the content of the fields - if every non blank value
++is a valid integer then the type is integer, otherwise if it is a valid long long
++nubmer then the type is longlong, otherwise if it is a valid real
++number then the type is real, otherwise the type is string.  Note that this is
++based on the content of the fields - quoting fields does not change the way they
++are interpreted.
++</p>
++
++
++<h4><a name="example">Example of a text file with X,Y point coordinates</a></h4> 
++<pre>
++X;Y;ELEV
++-300120;7689960;13
++-654360;7562040;52
++1640;7512840;3
++</pre>
++<p>This file:</p>
++<ul>
++<li> Uses <b>;</b> as delimiter. Any character can be used to delimit the fields.</li>
++<li>The first row is the header row. It contains the field names X, Y and ELEV.</li>
++<li>The x coordinates are contained in the X field.</li>
++<li>The y coordinates are contained in the Y field.</li>
++</ul>
++<h4><a name="wkt_example">Example of a text file with WKT geometries</a></h4>
++<pre>
++id|wkt
++1|POINT(172.0702250 -43.6031036)
++2|POINT(172.0702250 -43.6031036)
++3|POINT(172.1543206 -43.5731302)
++4|POINT(171.9282585 -43.5493308)
++5|POINT(171.8827359 -43.5875983)
++</pre>
++<p>This file:</p>
++<ul>
++  <li>Has two fields defined in the header row: id and wkt.
++  <li>Uses <b>|</b> as a delimiter.</li>
++  <li>Specifies each point using the WKT notation
++</ul>
++
++<h4><a name="python">Using delimited text layers in Python</a></h4>
++<p>Delimited text data sources can be creating from Python in a similar way to other vector layers.
++The pattern is:
++</p>
++<pre>
++from PyQt4.QtCore import QUrl, QString
++from qgis.core import QgsVectorLayer, QgsMapLayerRegistry
++
++# Define the data source
++filename="test.csv"
++uri=QUrl.fromLocalFile(filename)
++uri.addQueryItem("type","csv")
++uri.addQueryItem("delimiter","|")
++uri.addQueryItem("wktField","wkt")
++# ... other delimited text parameters
++layer=QgsVectorLayer(QString(uri.toEncoded()),"Test CSV layer","delimitedtext")
++# Add the layer to the map
++if layer.isValid():
++    QgsMapLayerRegistry.instance().addMapLayer( layer )
++</pre>
++<p>This could be used to load the second example file above.</p>
++<p>The configuration of the delimited text layer is defined by adding query items to the uri.
++The following options can be added
++</p>
++<ul>
++    <li><tt>encoding=..</tt> defines the file encoding.  The default is &quot;UTF-8&quot;</li>
++    <li><tt>type=(csv|regexp|whitespace)</tt> defines the delimiter type.  Valid values are csv, 
++       regexp, and whitespace (which is just a special case of regexp).  The default is csv.</li>
++       <li><tt>delimiter=...</tt> defines the delimiters that will be used for csv formatted files, 
++       or the regular expression for regexp formatted files.  The default is , for CSV files.  There is
++       no default for regexp files.</li>
++       <li><tt>quote=..</tt> (for csv files) defines the characters used to quote fields. The default is &quot;</li>
++       <li><tt>escape=..</tt> (for csv files) defines the characters used to escape the special meaning of the next character. The default is &quot;</li>
++       <li><tt>skipLines=#</tt> defines the number of lines to discard from the beginning of the file. The default is 0.</li>
++       <li><tt>useHeader=(yes|no)</tt> defines whether the first data record contains the names of the data fields. The default is yes.</li>
++       <li><tt>trimFields=(yes|no)</tt> defines whether leading and trailing whitespace is to be removed from unquoted fields. The default is no.</li>
++       <li><tt>maxFields=#</tt> defines the maximum number of fields that will be loaded from the file.  
++       Additional fields in each record will be discarded. The default is 0 - include all fields.
++       (This option is not available from the delimited text layer dialog box).</li>
++       <li><tt>skipEmptyFields=(yes|no)</tt> defines whether empty unquoted fields will be discarded (applied after trimFields). The default is no.</li>
++       <li><tt>decimalPoint=.</tt> specifies an alternative character that may be used as a decimal point in numeric fields.  The default is a point (full stop) character.</li>
++       <li><tt>wktField=fieldname</tt> specifies the name or number (starting at 1) of the field containing a well known text geometry definition</li>
++       <li><tt>xField=fieldname</tt> specifies the name or number (starting at 1) of the field the X coordinate (only applies if wktField is not defined)</li>
++       <li><tt>yField=fieldname</tt> specifies the name or number (starting at 1) of the field the Y coordinate (only applies if wktField is not defined)</li>
++       <li><tt>geomType=(auto|point|line|polygon|none)</tt> specifies type of geometry for wkt fields, or none to load the file as an attribute-only table.  The default is auto.</li>
++       <li><tt>subset=expression</tt> specifies an expression used to identify a subset of the records that will be 
++       used.</li>
++       <li><tt>crs=...</tt> specifies the coordinate system to use for the vector layer, in a format accepted by QgsCoordinateReferenceSystem.createFromString (for example &quot;EPSG:4167&quot;).  If this is not 
++       specified then a dialog box may request this information from the user
++       when the layer is loaded (depending on QGIS CRS settings).</li>
++       <li><tt>subsetIndex=(yes|no)</tt> specifies whether the provider should build an index to define subset during the initial file scan.  The index will apply both for explicitly defined subsets, and for the implicit subset of features for which the geometry definition is valid.  By default the subset index is built if it is applicable.</li>
++       <li><tt>spatialIndex=(yes|no)</tt> specifies whether the provider should build a spatial index during the initial file scan.  By default the spatial index is not built. </li>
++       <li><tt>watchFile=(yes|no)</tt> specifies whether the provider should use a file system watcher to monitor for changes to the file.</li>
++       <li><tt>quiet=(yes|no)</tt> specifies whether errors encountered loading the layer are presented in a dialog box (they will be written to the QGIS log in any case). The default is no.  This option is not available from the GUI</li>
++</ul>
++
++
++</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>contour</name>
+@@ -55869,7 +56630,11 @@ Plugin will not be enabled.</translation
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Filled</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -60658,7 +61423,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>xyz</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -60685,7 +61454,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Pyramidized</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -62510,7 +63283,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Hillshade</source>
++        <translation type="unfinished">Hillshade</translation>
+     </message>
+ </context>
+ <context>
+@@ -63498,7 +64275,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Merged</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63517,7 +64298,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Nearblack</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63616,7 +64401,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>PCT to RGB</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63631,7 +64420,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Vectorized</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63666,7 +64459,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Distance</source>
++        <translation type="unfinished">Distance</translation>
+     </message>
+ </context>
+ <context>
+@@ -63681,7 +64478,7 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Write values inside an existing raster layer(*)</source>
+-        <translation>Write values inside an existing raster layer(*)</translation>
++        <translation type="obsolete">Write values inside an existing raster layer(*)</translation>
+     </message>
+     <message>
+         <source>Set output raster size (ignored if above option is checked)</source>
+@@ -63701,7 +64498,7 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer: mandatory to choose an existing raster layer if the (*) option is selected</source>
+-        <translation>Output layer: mandatory to choose an existing raster layer if the (*) option is selected</translation>
++        <translation type="obsolete">Output layer: mandatory to choose an existing raster layer if the (*) option is selected</translation>
+     </message>
+     <message>
+         <source>Nodata value</source>
+@@ -63733,7 +64530,15 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Force the generation of an associated ESRI world file (.tfw))</source>
+-        <translation>Force the generation of an associated ESRI world file (.tfw))</translation>
++        <translation type="obsolete">Force the generation of an associated ESRI world file (.tfw))</translation>
++    </message>
++    <message>
++        <source>Force the generation of an associated ESRI world file (.tfw)</source>
++        <translation type="unfinished"></translation>
++    </message>
++    <message>
++        <source>Rasterized</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63748,7 +64553,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>RGB to PCT</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63767,7 +64576,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Roughness</source>
++        <translation type="unfinished">Roughness</translation>
+     </message>
+ </context>
+ <context>
+@@ -63856,7 +64669,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
++    </message>
++    <message>
++        <source>Sieved</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -63887,7 +64704,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Slope</source>
++        <translation type="unfinished">Slope</translation>
+     </message>
+ </context>
+ <context>
+@@ -64045,7 +64866,11 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output file</source>
+-        <translation>Output file</translation>
++        <translation type="obsolete">Output file</translation>
++    </message>
++    <message>
++        <source>Topographic Position Index</source>
++        <translation type="unfinished"></translation>
+     </message>
+ </context>
+ <context>
+@@ -64088,7 +64913,7 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
+     </message>
+     <message>
+         <source>Nodata value, leave blank to take the nodata value from input</source>
+@@ -64122,6 +64947,10 @@ Format a date type or string into a cust
+         <source>Force the generation of an associated ESRI world file (.tfw))</source>
+         <translation>Force the generation of an associated ESRI world file (.tfw))</translation>
+     </message>
++    <message>
++        <source>Translated</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>tri</name>
+@@ -64319,7 +65148,7 @@ Format a date type or string into a cust
+     </message>
+     <message>
+         <source>Output layer</source>
+-        <translation>Output layer</translation>
++        <translation type="obsolete">Output layer</translation>
+     </message>
+     <message>
+         <source>Nodata value, leave blank to take the nodata value from input</source>
+@@ -64353,5 +65182,9 @@ Format a date type or string into a cust
+         <source>Force the generation of an associated ESRI world file (.tfw))</source>
+         <translation>Force the generation of an associated ESRI world file (.tfw))</translation>
+     </message>
++    <message>
++        <source>Warped</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ </TS>
diff --git a/debian/patches/0001-german-translation-update-3.patch b/debian/patches/0001-german-translation-update-3.patch
new file mode 100644
index 0000000..1ef9bc8
--- /dev/null
+++ b/debian/patches/0001-german-translation-update-3.patch
@@ -0,0 +1,199 @@
+From 464646d1e7cd32fd8dc6019c9f1744945f433d1f Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Sun, 26 Apr 2015 15:29:59 +0200
+Subject: german translation update
+Origin: https://github.com/qgis/QGIS/commit/464646d1e7cd32fd8dc6019c9f1744945f433d1f
+
+---
+ doc/TRANSLATORS |   88 +++++++++++++++++++++++++++----------------------------
+ i18n/qgis_de.ts |   20 +++++++++++--
+ i18n/qgis_en.ts |   18 ++++++++++--
+ 3 files changed, 76 insertions(+), 50 deletions(-)
+
+--- a/doc/TRANSLATORS
++++ b/doc/TRANSLATORS
+@@ -1,46 +1,46 @@
+ <style>table {font-size:80%;}th {text-align:left; }.bartodo{ background-color:red;width:100px;height:20px;}.bardone{ background-color:green;width:80px;height:20px;font-size:80%;text-align:center;padding-top:4px;height:16px;color:white;}</style><table><tr><th colspan="2" style="width:250px;">Language</th><th>Finished %</th><th>Translators</th></tr>
+ 
+-<tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:13256 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:100px">100.0</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
+-<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:13134 unfinished:92 untranslated:30" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu, Marie Silvestre,  [...]
+-<tr><td><img src="qrc:/images/flags/nb.png"></td><td>Norwegian Bokmal</td><td><div title="finished:13134 unfinished:89 untranslated:33" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>James Stott, Maléne Peterson</td></tr>
+-<tr><td><img src="qrc:/images/flags/gl.png"></td><td>Galician</td><td><div title="finished:13134 unfinished:88 untranslated:34" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Xan Vieiro</td></tr>
+-<tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:13134 unfinished:88 untranslated:34" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar</td></tr>
+-<tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:13134 unfinished:83 untranslated:39" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Victor Axbom, Lars Luthman, Magnus Homann, Klas Karlsson, Isabelle J Wigren, Daniel Rosander, Anders Ekwall, Magnus Nilsson, Jonas Svensson, Christian Brinkenberg</td></tr>
+-<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:13130 unfinished:89 untranslated:37" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
+-<tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:13134 unfinished:81 untranslated:41" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros </td></tr>
+-<tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:13132 unfinished:80 untranslated:44" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp</td></tr>
+-<tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:13118 unfinished:84 untranslated:54" class="bartodo"><div class="bardone" style="width:99px">99.3</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo</td></tr>
+-<tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:13116 unfinished:77 untranslated:63" class="bartodo"><div class="bardone" style="width:99px">99.2</div></div></td><td>Kari Salovaara, Marko Järvenpää</td></tr>
+-<tr><td><img src="qrc:/images/flags/eu.png"></td><td>Basque</td><td><div title="finished:12983 unfinished:88 untranslated:185" class="bartodo"><div class="bardone" style="width:98px">98.3</div></div></td><td>Asier Sarasua Garmendia, Irantzu Alvarez</td></tr>
+-<tr><td><img src="qrc:/images/flags/ja.png"></td><td>Japanese</td><td><div title="finished:12921 unfinished:52 untranslated:283" class="bartodo"><div class="bardone" style="width:97px">97.7</div></div></td><td>BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate</td></tr>
+-<tr><td><img src="qrc:/images/flags/pl.png"></td><td>Polish</td><td><div title="finished:12668 unfinished:33 untranslated:555" class="bartodo"><div class="bardone" style="width:95px">95.7</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok</td></tr>
+-<tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:12364 unfinished:58 untranslated:834" class="bartodo"><div class="bardone" style="width:93px">93.5</div></div></td><td>Zoltan Siki</td></tr>
+-<tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:12272 unfinished:64 untranslated:920" class="bartodo"><div class="bardone" style="width:92px">92.8</div></div></td><td>Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar</td></tr>
+-<tr><td><img src="qrc:/images/flags/da.png"></td><td>Danish</td><td><div title="finished:12240 unfinished:27 untranslated:989" class="bartodo"><div class="bardone" style="width:92px">92.4</div></div></td><td>Jacob Overgaard Madsen, Bo Victor Thomsen</td></tr>
+-<tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese simplified</td><td><div title="finished:12161 unfinished:39 untranslated:1056" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Calvin Ngei, Lisashen</td></tr>
+-<tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:12147 unfinished:38 untranslated:1071" class="bartodo"><div class="bardone" style="width:91px">91.8</div></div></td><td>Calvin Ngei, Zhang Jun, Richard Xie</td></tr>
+-<tr><td><img src="qrc:/images/flags/ko.png"></td><td>Korean</td><td><div title="finished:12054 unfinished:12 untranslated:1190" class="bartodo"><div class="bardone" style="width:90px">91.0</div></div></td><td>OSGeo Korean Chapter</td></tr>
+-<tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:12013 unfinished:45 untranslated:1198" class="bartodo"><div class="bardone" style="width:90px">90.8</div></div></td><td>Alexander Bruy, Artem Popov</td></tr>
+-<tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:12012 unfinished:28 untranslated:1216" class="bartodo"><div class="bardone" style="width:90px">90.7</div></div></td><td>Phan Anh, Bùi Hữu Mạnh</td></tr>
+-<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan (Province of China))</td><td><div title="finished:11962 unfinished:28 untranslated:1266" class="bartodo"><div class="bardone" style="width:90px">90.3</div></div></td><td>Nung-yao Lin</td></tr>
+-<tr><td><img src="qrc:/images/flags/cs.png"></td><td>Czech</td><td><div title="finished:11816 unfinished:32 untranslated:1408" class="bartodo"><div class="bardone" style="width:89px">89.3</div></div></td><td>Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček</td></tr>
+-<tr><td><img src="qrc:/images/flags/hi.png"></td><td>Hindi</td><td><div title="finished:11342 unfinished:17 untranslated:1897" class="bartodo"><div class="bardone" style="width:85px">85.6</div></div></td><td>Harish Kumar Solanki</td></tr>
+-<tr><td><img src="qrc:/images/flags/lt.png"></td><td>Lithuanian</td><td><div title="finished:10746 unfinished:43 untranslated:2467" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Paulius Litvinas, Tomas Straupis, Kestas M</td></tr>
+-<tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:10727 unfinished:71 untranslated:2458" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa</td></tr>
+-<tr><td><img src="qrc:/images/flags/bs.png"></td><td>Bosnian</td><td><div title="finished:10487 unfinished:29 untranslated:2740" class="bartodo"><div class="bardone" style="width:79px">79.2</div></div></td><td>Almir Karabegovic</td></tr>
+-<tr><td><img src="qrc:/images/flags/km.png"></td><td>Central Khmer</td><td><div title="finished:9355 unfinished:20 untranslated:3881" class="bartodo"><div class="bardone" style="width:70px">70.6</div></div></td><td>Khoem Sokhem</td></tr>
+-<tr><td><img src="qrc:/images/flags/sl.png"></td><td>Slovenian</td><td><div title="finished:9009 unfinished:24 untranslated:4223" class="bartodo"><div class="bardone" style="width:68px">68.1</div></div></td><td>Jože Detečnik, Dejan Gregor, Jaka Kranjc</td></tr>
+-<tr><td><img src="qrc:/images/flags/lv.png"></td><td>Latvian</td><td><div title="finished:8874 unfinished:60 untranslated:4322" class="bartodo"><div class="bardone" style="width:67px">67.2</div></div></td><td>Maris Nartiss, Pēteris Brūns</td></tr>
+-<tr><td><img src="qrc:/images/flags/ar.png"></td><td>Arabic</td><td><div title="finished:8862 unfinished:43 untranslated:4351" class="bartodo"><div class="bardone" style="width:67px">67.0</div></div></td><td>Ichaouia Amine, Hosham Munier</td></tr>
+-<tr><td><img src="qrc:/images/flags/et.png"></td><td>Estonian</td><td><div title="finished:8786 unfinished:44 untranslated:4426" class="bartodo"><div class="bardone" style="width:66px">66.4</div></div></td><td>Veiko Viil</td></tr>
+-<tr><td><img src="qrc:/images/flags/hr.png"></td><td>Croatian</td><td><div title="finished:7424 unfinished:25 untranslated:5807" class="bartodo"><div class="bardone" style="width:56px">56.1</div></div></td><td>Zoran Jankovic</td></tr>
+-<tr><td><img src="qrc:/images/flags/tr.png"></td><td>Turkish</td><td><div title="finished:6811 unfinished:20 untranslated:6425" class="bartodo"><div class="bardone" style="width:51px">51.5</div></div></td><td>Osman Yalçın YILMAZ, Omur Saygin</td></tr>
+-<tr><td><img src="qrc:/images/flags/sk.png"></td><td>Slovak</td><td><div title="finished:5929 unfinished:962 untranslated:6365" class="bartodo"><div class="bardone" style="width:48px">48.4</div></div></td><td>Lubos Balazovic, Jana Kormanikova, Ivan Mincik</td></tr>
+-<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian (latin)</td><td><div title="finished:6217 unfinished:49 untranslated:6990" class="bartodo"><div class="bardone" style="width:47px">47.1</div></div></td><td>Goran Ivanković</td></tr>
+-<tr><td><img src="qrc:/images/flags/el.png"></td><td>Modern Greek (1453-)</td><td><div title="finished:6159 unfinished:19 untranslated:7078" class="bartodo"><div class="bardone" style="width:46px">46.5</div></div></td><td>Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves</td></tr>
+-<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian</td><td><div title="finished:5976 unfinished:36 untranslated:7244" class="bartodo"><div class="bardone" style="width:45px">45.2</div></div></td><td>Goran Ivanković</td></tr>
+-<tr><td><img src="qrc:/images/flags/ca.png"></td><td>Catalan</td><td><div title="finished:5126 unfinished:32 untranslated:8098" class="bartodo"><div class="bardone" style="width:38px">38.8</div></div></td><td>Albert F, Pau Reguant Ridó, Xavier Roijals</td></tr>
+-<tr><td><img src="qrc:/images/flags/th.png"></td><td>Thai</td><td><div title="finished:5044 unfinished:35 untranslated:8177" class="bartodo"><div class="bardone" style="width:38px">38.2</div></div></td><td>Man Chao</td></tr>
+-<tr><td><img src="qrc:/images/flags/fa.png"></td><td>Persian</td><td><div title="finished:5011 unfinished:41 untranslated:8204" class="bartodo"><div class="bardone" style="width:37px">38.0</div></div></td><td>Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan</td></tr>
+-<tr><td><img src="qrc:/images/flags/is.png"></td><td>Icelandic</td><td><div title="finished:4892 unfinished:33 untranslated:8331" class="bartodo"><div class="bardone" style="width:37px">37.0</div></div></td><td>Ásta Kristín Óladóttir, Thordur Ivarsson</td></tr>
+-<tr><td><img src="qrc:/images/flags/uk.png"></td><td>Ukrainian</td><td><div title="finished:4809 unfinished:29 untranslated:8418" class="bartodo"><div class="bardone" style="width:36px">36.4</div></div></td><td>Alexander Bruy</td></tr></table>
++<tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:13254 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
++<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:13131 unfinished:92 untranslated:32" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu, Marie Silvestre,  [...]
++<tr><td><img src="qrc:/images/flags/nb.png"></td><td>Norwegian Bokmal</td><td><div title="finished:13131 unfinished:89 untranslated:35" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>James Stott, Maléne Peterson</td></tr>
++<tr><td><img src="qrc:/images/flags/gl.png"></td><td>Galician</td><td><div title="finished:13131 unfinished:88 untranslated:36" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Xan Vieiro</td></tr>
++<tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:13131 unfinished:88 untranslated:36" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar</td></tr>
++<tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:13131 unfinished:83 untranslated:41" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Victor Axbom, Lars Luthman, Magnus Homann, Klas Karlsson, Isabelle J Wigren, Daniel Rosander, Anders Ekwall, Magnus Nilsson, Jonas Svensson, Christian Brinkenberg</td></tr>
++<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:13127 unfinished:89 untranslated:39" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
++<tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:13131 unfinished:81 untranslated:43" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros </td></tr>
++<tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:13129 unfinished:80 untranslated:46" class="bartodo"><div class="bardone" style="width:99px">99.4</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp</td></tr>
++<tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:13115 unfinished:84 untranslated:56" class="bartodo"><div class="bardone" style="width:99px">99.3</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo</td></tr>
++<tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:13113 unfinished:77 untranslated:65" class="bartodo"><div class="bardone" style="width:99px">99.2</div></div></td><td>Kari Salovaara, Marko Järvenpää</td></tr>
++<tr><td><img src="qrc:/images/flags/eu.png"></td><td>Basque</td><td><div title="finished:12980 unfinished:88 untranslated:187" class="bartodo"><div class="bardone" style="width:98px">98.3</div></div></td><td>Asier Sarasua Garmendia, Irantzu Alvarez</td></tr>
++<tr><td><img src="qrc:/images/flags/ja.png"></td><td>Japanese</td><td><div title="finished:12918 unfinished:52 untranslated:285" class="bartodo"><div class="bardone" style="width:97px">97.7</div></div></td><td>BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate</td></tr>
++<tr><td><img src="qrc:/images/flags/pl.png"></td><td>Polish</td><td><div title="finished:12665 unfinished:33 untranslated:557" class="bartodo"><div class="bardone" style="width:95px">95.7</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok</td></tr>
++<tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:12361 unfinished:58 untranslated:836" class="bartodo"><div class="bardone" style="width:93px">93.5</div></div></td><td>Zoltan Siki</td></tr>
++<tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:12269 unfinished:64 untranslated:922" class="bartodo"><div class="bardone" style="width:92px">92.8</div></div></td><td>Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar</td></tr>
++<tr><td><img src="qrc:/images/flags/da.png"></td><td>Danish</td><td><div title="finished:12237 unfinished:27 untranslated:991" class="bartodo"><div class="bardone" style="width:92px">92.4</div></div></td><td>Jacob Overgaard Madsen, Bo Victor Thomsen</td></tr>
++<tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese simplified</td><td><div title="finished:12158 unfinished:39 untranslated:1058" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Calvin Ngei, Lisashen</td></tr>
++<tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:12144 unfinished:38 untranslated:1073" class="bartodo"><div class="bardone" style="width:91px">91.8</div></div></td><td>Calvin Ngei, Zhang Jun, Richard Xie</td></tr>
++<tr><td><img src="qrc:/images/flags/ko.png"></td><td>Korean</td><td><div title="finished:12051 unfinished:12 untranslated:1192" class="bartodo"><div class="bardone" style="width:90px">91.0</div></div></td><td>OSGeo Korean Chapter</td></tr>
++<tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:12010 unfinished:45 untranslated:1200" class="bartodo"><div class="bardone" style="width:90px">90.8</div></div></td><td>Alexander Bruy, Artem Popov</td></tr>
++<tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:12009 unfinished:28 untranslated:1218" class="bartodo"><div class="bardone" style="width:90px">90.7</div></div></td><td>Phan Anh, Bùi Hữu Mạnh</td></tr>
++<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan (Province of China))</td><td><div title="finished:11959 unfinished:28 untranslated:1268" class="bartodo"><div class="bardone" style="width:90px">90.3</div></div></td><td>Nung-yao Lin</td></tr>
++<tr><td><img src="qrc:/images/flags/cs.png"></td><td>Czech</td><td><div title="finished:11813 unfinished:32 untranslated:1410" class="bartodo"><div class="bardone" style="width:89px">89.2</div></div></td><td>Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček</td></tr>
++<tr><td><img src="qrc:/images/flags/hi.png"></td><td>Hindi</td><td><div title="finished:11339 unfinished:17 untranslated:1899" class="bartodo"><div class="bardone" style="width:85px">85.6</div></div></td><td>Harish Kumar Solanki</td></tr>
++<tr><td><img src="qrc:/images/flags/lt.png"></td><td>Lithuanian</td><td><div title="finished:10743 unfinished:43 untranslated:2469" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Paulius Litvinas, Tomas Straupis, Kestas M</td></tr>
++<tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:10724 unfinished:71 untranslated:2460" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa</td></tr>
++<tr><td><img src="qrc:/images/flags/bs.png"></td><td>Bosnian</td><td><div title="finished:10484 unfinished:29 untranslated:2742" class="bartodo"><div class="bardone" style="width:79px">79.2</div></div></td><td>Almir Karabegovic</td></tr>
++<tr><td><img src="qrc:/images/flags/km.png"></td><td>Central Khmer</td><td><div title="finished:9352 unfinished:20 untranslated:3883" class="bartodo"><div class="bardone" style="width:70px">70.6</div></div></td><td>Khoem Sokhem</td></tr>
++<tr><td><img src="qrc:/images/flags/sl.png"></td><td>Slovenian</td><td><div title="finished:9006 unfinished:24 untranslated:4225" class="bartodo"><div class="bardone" style="width:68px">68.0</div></div></td><td>Jože Detečnik, Dejan Gregor, Jaka Kranjc</td></tr>
++<tr><td><img src="qrc:/images/flags/lv.png"></td><td>Latvian</td><td><div title="finished:8871 unfinished:60 untranslated:4324" class="bartodo"><div class="bardone" style="width:67px">67.2</div></div></td><td>Maris Nartiss, Pēteris Brūns</td></tr>
++<tr><td><img src="qrc:/images/flags/ar.png"></td><td>Arabic</td><td><div title="finished:8859 unfinished:43 untranslated:4353" class="bartodo"><div class="bardone" style="width:66px">67.0</div></div></td><td>Ichaouia Amine, Hosham Munier</td></tr>
++<tr><td><img src="qrc:/images/flags/et.png"></td><td>Estonian</td><td><div title="finished:8783 unfinished:44 untranslated:4428" class="bartodo"><div class="bardone" style="width:66px">66.4</div></div></td><td>Veiko Viil</td></tr>
++<tr><td><img src="qrc:/images/flags/hr.png"></td><td>Croatian</td><td><div title="finished:7421 unfinished:25 untranslated:5809" class="bartodo"><div class="bardone" style="width:56px">56.1</div></div></td><td>Zoran Jankovic</td></tr>
++<tr><td><img src="qrc:/images/flags/tr.png"></td><td>Turkish</td><td><div title="finished:6810 unfinished:20 untranslated:6425" class="bartodo"><div class="bardone" style="width:51px">51.5</div></div></td><td>Osman Yalçın YILMAZ, Omur Saygin</td></tr>
++<tr><td><img src="qrc:/images/flags/sk.png"></td><td>Slovak</td><td><div title="finished:5927 unfinished:961 untranslated:6367" class="bartodo"><div class="bardone" style="width:48px">48.3</div></div></td><td>Lubos Balazovic, Jana Kormanikova, Ivan Mincik</td></tr>
++<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian (latin)</td><td><div title="finished:6216 unfinished:49 untranslated:6990" class="bartodo"><div class="bardone" style="width:47px">47.1</div></div></td><td>Goran Ivanković</td></tr>
++<tr><td><img src="qrc:/images/flags/el.png"></td><td>Modern Greek (1453-)</td><td><div title="finished:6156 unfinished:19 untranslated:7080" class="bartodo"><div class="bardone" style="width:46px">46.5</div></div></td><td>Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves</td></tr>
++<tr><td><img src="qrc:/images/flags/sr.png"></td><td>Serbian</td><td><div title="finished:5975 unfinished:36 untranslated:7244" class="bartodo"><div class="bardone" style="width:45px">45.2</div></div></td><td>Goran Ivanković</td></tr>
++<tr><td><img src="qrc:/images/flags/ca.png"></td><td>Catalan</td><td><div title="finished:5126 unfinished:32 untranslated:8097" class="bartodo"><div class="bardone" style="width:38px">38.8</div></div></td><td>Albert F, Pau Reguant Ridó, Xavier Roijals</td></tr>
++<tr><td><img src="qrc:/images/flags/th.png"></td><td>Thai</td><td><div title="finished:5043 unfinished:35 untranslated:8177" class="bartodo"><div class="bardone" style="width:38px">38.2</div></div></td><td>Man Chao</td></tr>
++<tr><td><img src="qrc:/images/flags/fa.png"></td><td>Persian</td><td><div title="finished:5011 unfinished:41 untranslated:8203" class="bartodo"><div class="bardone" style="width:37px">38.0</div></div></td><td>Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan</td></tr>
++<tr><td><img src="qrc:/images/flags/is.png"></td><td>Icelandic</td><td><div title="finished:4891 unfinished:33 untranslated:8331" class="bartodo"><div class="bardone" style="width:37px">37.0</div></div></td><td>Ásta Kristín Óladóttir, Thordur Ivarsson</td></tr>
++<tr><td><img src="qrc:/images/flags/uk.png"></td><td>Ukrainian</td><td><div title="finished:4808 unfinished:29 untranslated:8418" class="bartodo"><div class="bardone" style="width:36px">36.4</div></div></td><td>Alexander Bruy</td></tr></table>
+--- a/i18n/qgis_de.ts
++++ b/i18n/qgis_de.ts
+@@ -17627,7 +17627,7 @@ Datenbank: %2</translation>
+     </message>
+     <message>
+         <source>Join</source>
+-        <translation>Verbinden</translation>
++        <translation type="obsolete">Verbinden</translation>
+     </message>
+     <message>
+         <source>Advanced</source>
+@@ -37360,8 +37360,15 @@ Fehler:%2
+         <source>Connection failed - Check settings and try again.
+ 
+ </source>
+-        <translation>Verbindung gescheitert - Einstellungen überprüfen und wiederholen.
++        <translation type="obsolete">Verbindung gescheitert - Einstellungen überprüfen und wiederholen.
++
++</translation>
++    </message>
++    <message>
++        <source>Connection failed - consult message log for details.
+ 
++</source>
++        <translation type="unfinished">Verbindung fehlgeschlagen - bitte das Protokoll für Details konsultieren.j
+ </translation>
+     </message>
+ </context>
+@@ -38314,10 +38321,17 @@ Fehler: %2</translation>
+         <source>Connection failed - Check settings and try again.
+ 
+ </source>
+-        <translation>Verbindung gescheitert - Einstellungen überprüfen und wiederholen.
++        <translation type="obsolete">Verbindung gescheitert - Einstellungen überprüfen und wiederholen.
+ 
+ </translation>
+     </message>
++    <message>
++        <source>Connection failed - consult message log for details.
++
++</source>
++        <translation>Verbindung fehlgeschlagen - bitte das Protokoll für Details konsultieren.
++</translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsPgNewConnectionBase</name>
+--- a/i18n/qgis_en.ts
++++ b/i18n/qgis_en.ts
+@@ -17645,7 +17645,7 @@ Database: %2</translation>
+     </message>
+     <message>
+         <source>Join</source>
+-        <translation>Join</translation>
++        <translation type="obsolete">Join</translation>
+     </message>
+     <message>
+         <source>Advanced</source>
+@@ -37308,10 +37308,16 @@ error:%2
+         <source>Connection failed - Check settings and try again.
+ 
+ </source>
+-        <translation>Connection failed - Check settings and try again.
++        <translation type="obsolete">Connection failed - Check settings and try again.
+ 
+ </translation>
+     </message>
++    <message>
++        <source>Connection failed - consult message log for details.
++
++</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsOracleNewConnectionBase</name>
+@@ -38263,10 +38269,16 @@ Error: %2</translation>
+         <source>Connection failed - Check settings and try again.
+ 
+ </source>
+-        <translation>Connection failed - Check settings and try again.
++        <translation type="obsolete">Connection failed - Check settings and try again.
+ 
+ </translation>
+     </message>
++    <message>
++        <source>Connection failed - consult message log for details.
++
++</source>
++        <translation type="unfinished"></translation>
++    </message>
+ </context>
+ <context>
+     <name>QgsPgNewConnectionBase</name>
diff --git a/debian/patches/0001-include-pointer-to-message-in-connection-error-messa.patch b/debian/patches/0001-include-pointer-to-message-in-connection-error-messa.patch
new file mode 100644
index 0000000..27282d2
--- /dev/null
+++ b/debian/patches/0001-include-pointer-to-message-in-connection-error-messa.patch
@@ -0,0 +1,35 @@
+From af5b5e7cfaf7c6c31c1123804131c8458de5d0e1 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Thu, 9 Apr 2015 10:10:33 +0200
+Subject: include pointer to message in connection error message (fixes
+ #12526)
+Bug: http://hub.qgis.org/issues/12526
+Origin: https://github.com/qgis/QGIS/commit/af5b5e7cfaf7c6c31c1123804131c8458de5d0e1
+
+(cherry picked from commit 10a51f672fa6b98174e9b94dd932dc08e5d77e71)
+---
+ src/providers/oracle/qgsoraclenewconnection.cpp |    2 +-
+ src/providers/postgres/qgspgnewconnection.cpp   |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/providers/oracle/qgsoraclenewconnection.cpp
++++ b/src/providers/oracle/qgsoraclenewconnection.cpp
+@@ -157,7 +157,7 @@ void QgsOracleNewConnection::on_btnConne
+   {
+     QMessageBox::information( this,
+                               tr( "Test connection" ),
+-                              tr( "Connection failed - Check settings and try again.\n\n" ) );
++                              tr( "Connection failed - consult message log for details.\n\n" ) );
+   }
+ }
+ 
+--- a/src/providers/postgres/qgspgnewconnection.cpp
++++ b/src/providers/postgres/qgspgnewconnection.cpp
+@@ -197,6 +197,6 @@ void QgsPgNewConnection::testConnection(
+   {
+     QMessageBox::information( this,
+                               tr( "Test connection" ),
+-                              tr( "Connection failed - Check settings and try again.\n\n" ) );
++                              tr( "Connection failed - consult message log for details.\n\n" ) );
+   }
+ }
diff --git a/debian/patches/0001-include-qgslayerdefinition.sip-in-bindings.patch b/debian/patches/0001-include-qgslayerdefinition.sip-in-bindings.patch
new file mode 100644
index 0000000..bbebdbb
--- /dev/null
+++ b/debian/patches/0001-include-qgslayerdefinition.sip-in-bindings.patch
@@ -0,0 +1,50 @@
+From 16e39bcdfe598b4e7ef091c990ee31246d44d6b0 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Tue, 24 Mar 2015 12:01:18 +0100
+Subject: include qgslayerdefinition.sip in bindings
+Origin: https://github.com/qgis/QGIS/commit/16e39bcdfe598b4e7ef091c990ee31246d44d6b0
+
+(cherry picked from commit 80bbed1595d352c22a79cff5c87d62e740826b25)
+---
+ python/core/core.sip               |    1 +
+ python/core/qgslayerdefinition.sip |   16 ++++++++--------
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+--- a/python/core/core.sip
++++ b/python/core/core.sip
+@@ -120,6 +120,7 @@
+ %Include qgsprojectfiletransform.sip
+ %Include qgsvectorlayereditutils.sip
+ %Include qgsvectorlayerfeatureiterator.sip
++%Include qgslayerdefinition.sip
+ 
+ %Include composer/qgsaddremoveitemcommand.sip
+ %Include composer/qgsaddremovemultiframecommand.sip
+--- a/python/core/qgslayerdefinition.sip
++++ b/python/core/qgslayerdefinition.sip
+@@ -5,17 +5,17 @@
+  * to the QLR file once loaded.  Consider the QLR file a mini project file for layers and styles.  QLR
+  * files also store the layer tree info for the exported layers, including group information.
+  */
+-class CORE_EXPORT QgsLayerDefinition
++class QgsLayerDefinition
+ {
+ %TypeHeaderCode
+ #include <qgslayerdefinition.h>
+ %End
+-public:
+-  /* Loads the QLR at path into QGIS.  New layers are added to rootGroup and the map layer registry*/
+-  static bool openLayerDefinition( const QString & path, QgsLayerTreeGroup* rootGroup, QString &errorMessage /Out/ );
+-  /* Loads the QLR from the XML document.  New layers are added to rootGroup and the map layer registry */
+-  static bool openLayerDefinition( QDomDocument doc, QgsLayerTreeGroup* rootGroup, QString &errorMessage /Out/ );
+-  /* Export the selected layer tree nodes to a QLR file */
+-  static bool exportLayerDefinition( QString path, QList<QgsLayerTreeNode*> selectedTreeNodes, QString &errorMessage /Out/ );
++  public:
++    /* Loads the QLR at path into QGIS.  New layers are added to rootGroup and the map layer registry*/
++    static bool loadLayerDefinition( const QString & path, QgsLayerTreeGroup* rootGroup, QString &errorMessage /Out/ );
++    /* Loads the QLR from the XML document.  New layers are added to rootGroup and the map layer registry */
++    static bool loadLayerDefinition( QDomDocument doc, QgsLayerTreeGroup* rootGroup, QString &errorMessage /Out/ );
++    /* Export the selected layer tree nodes to a QLR file */
++    static bool exportLayerDefinition( QString path, QList<QgsLayerTreeNode*> selectedTreeNodes, QString &errorMessage /Out/ );
+ };
+ 
diff --git a/debian/patches/0001-map-canvas-update-sip-bindings-followup-bef4059f.patch b/debian/patches/0001-map-canvas-update-sip-bindings-followup-bef4059f.patch
new file mode 100644
index 0000000..d4a3af6
--- /dev/null
+++ b/debian/patches/0001-map-canvas-update-sip-bindings-followup-bef4059f.patch
@@ -0,0 +1,34 @@
+From d9245d7090d67bf499c9989141f845e3a733eada Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Sat, 4 Apr 2015 23:56:23 +0200
+Subject: map canvas: update sip bindings (followup bef4059f)
+Origin: https://github.com/qgis/QGIS/commit/d9245d7090d67bf499c9989141f845e3a733eada
+
+---
+ python/gui/qgsmapcanvas.sip |    3 +++
+ src/gui/qgsmapcanvas.h      |    2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+--- a/python/gui/qgsmapcanvas.sip
++++ b/python/gui/qgsmapcanvas.sip
+@@ -340,6 +340,9 @@ class QgsMapCanvas : QGraphicsView
+     //! This slot is connected to the visibility change of one or more layers
+     void layerStateChange();
+ 
++    //! This slot is connected to the layer's CRS change
++    void layerCrsChange();
++
+     //! Whether to suppress rendering or not
+     void setRenderFlag( bool theFlag );
+     //! State of render suppression flag
+--- a/src/gui/qgsmapcanvas.h
++++ b/src/gui/qgsmapcanvas.h
+@@ -409,7 +409,7 @@ class GUI_EXPORT QgsMapCanvas : public Q
+ 
+     //! This slot is connected to the visibility change of one or more layers
+     void layerStateChange();
+-    
++
+     //! This slot is connected to the layer's CRS change
+     void layerCrsChange();
+ 
diff --git a/debian/patches/0001-oracle-spatial-use-sdo_relate-for-exact-intersect-fe.patch b/debian/patches/0001-oracle-spatial-use-sdo_relate-for-exact-intersect-fe.patch
new file mode 100644
index 0000000..adee958
--- /dev/null
+++ b/debian/patches/0001-oracle-spatial-use-sdo_relate-for-exact-intersect-fe.patch
@@ -0,0 +1,32 @@
+From 0beeadf9066a23b6abf9fbc6958e3c723cff33da Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 10 Apr 2015 17:11:47 +0200
+Subject: oracle spatial: use sdo_relate for exact intersect feature requests
+ where oracle spatial is available
+Origin: https://github.com/qgis/QGIS/commit/0beeadf9066a23b6abf9fbc6958e3c723cff33da
+
+(cherry picked from commit fa99a960844e8bc6c909c58961bf9a0df070d877)
+---
+ src/providers/oracle/qgsoraclefeatureiterator.cpp |    7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/src/providers/oracle/qgsoraclefeatureiterator.cpp
++++ b/src/providers/oracle/qgsoraclefeatureiterator.cpp
+@@ -66,14 +66,13 @@ QgsOracleFeatureIterator::QgsOracleFeatu
+                        .arg( qgsDoubleToString( rect.yMaximum() ) );
+ 
+         whereClause = QString( "sdo_filter(%1,%2)='TRUE'" ).arg( QgsOracleProvider::quotedIdentifier( mSource->mGeometryColumn ) ).arg( bbox );
+-#if 0
+-        if ( mRequest.flags() & QgsFeatureRequest::ExactIntersect )
++
++        if ( mRequest.flags() & QgsFeatureRequest::ExactIntersect && mConnection->hasSpatial() )
+         {
+           whereClause += QString( " AND sdo_relate(%1,%2,'mask=ANYINTERACT')='TRUE'" )
+-                         .arg( quotedIdentifier( P->mGeometryColumn ) )
++                         .arg( QgsOracleProvider::quotedIdentifier( mSource->mGeometryColumn ) )
+                          .arg( bbox );
+         }
+-#endif
+       }
+       break;
+ 
diff --git a/debian/patches/0001-osgeo4w-reflect-packagename-and-version-in-nightly-b.patch b/debian/patches/0001-osgeo4w-reflect-packagename-and-version-in-nightly-b.patch
new file mode 100644
index 0000000..c569070
--- /dev/null
+++ b/debian/patches/0001-osgeo4w-reflect-packagename-and-version-in-nightly-b.patch
@@ -0,0 +1,37 @@
+From 6ada2b61cf52f5e0ef21013c9de45a8f00a2caef Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Sun, 26 Apr 2015 15:46:29 +0200
+Subject: osgeo4w: reflect packagename and version in nightly build
+Origin: https://github.com/qgis/QGIS/commit/6ada2b61cf52f5e0ef21013c9de45a8f00a2caef
+
+(cherry-picked from 9c5cbd4, dec0ca5 and 51a7317)
+---
+ ms-windows/osgeo4w/package-nightly.cmd |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/ms-windows/osgeo4w/package-nightly.cmd
++++ b/ms-windows/osgeo4w/package-nightly.cmd
+@@ -56,7 +56,6 @@ path %path%;%PF86%\Microsoft Visual Stud
+ 
+ set CMAKE_OPT=^
+ 	-G "Visual Studio 10" ^
+-	-D BUILDNAME="OSGeo4W-Nightly-VC10-32" ^
+ 	-D SIP_BINARY_PATH=%O4W_ROOT%/apps/Python27/sip.exe ^
+ 	-D QWT_LIBRARY=%O4W_ROOT%/lib/qwt.lib ^
+ 	-D CMAKE_CXX_FLAGS_RELWITHDEBINFO="/MD /ZI /MP /Od /D NDEBUG /D QGISDEBUG" ^
+@@ -75,7 +74,6 @@ if not exist "%SETUPAPI_LIBRARY%" (echo
+ 
+ set CMAKE_OPT=^
+ 	-G "Visual Studio 10 Win64" ^
+-	-D BUILDNAME="OSGeo4W-Nightly-VC10-64" ^
+ 	-D SPATIALINDEX_LIBRARY=%O4W_ROOT%/lib/spatialindex-64.lib ^
+ 	-D SIP_BINARY_PATH=%O4W_ROOT%/bin/sip.exe ^
+ 	-D QWT_LIBRARY=%O4W_ROOT%/lib/qwt5.lib ^
+@@ -142,6 +140,7 @@ set GRASS_PREFIX=%O4W_ROOT%/apps/grass/g
+ 
+ cmake %CMAKE_OPT% ^
+ 	-D SITE="qgis.org" ^
++	-D BUILDNAME="%PACKAGENAME%-%VERSION%-Nightly-VC10-%ARCH%" ^
+ 	-D PEDANTIC=TRUE ^
+ 	-D WITH_QSPATIALITE=TRUE ^
+ 	-D WITH_SERVER=TRUE ^
diff --git a/debian/patches/0001-postgres-data-items-don-t-set-srid-for-geometryless-.patch b/debian/patches/0001-postgres-data-items-don-t-set-srid-for-geometryless-.patch
new file mode 100644
index 0000000..821bd58
--- /dev/null
+++ b/debian/patches/0001-postgres-data-items-don-t-set-srid-for-geometryless-.patch
@@ -0,0 +1,24 @@
+From 21b5a82c2137413fe8d6b9ef7e0fc1ee099326bb Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Tue, 7 Apr 2015 17:54:51 +0200
+Subject: postgres data items: don't set srid for geometryless layers
+Origin: https://github.com/qgis/QGIS/commit/21b5a82c2137413fe8d6b9ef7e0fc1ee099326bb
+
+(cherry picked from commit d6e22af94965a6601d93374e892edb2a9a5ebd6c)
+---
+ src/providers/postgres/qgspostgresdataitems.cpp |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/src/providers/postgres/qgspostgresdataitems.cpp
++++ b/src/providers/postgres/qgspostgresdataitems.cpp
+@@ -263,8 +263,9 @@ QString QgsPGLayerItem::createUri()
+ 
+   QgsDataSourceURI uri( QgsPostgresConn::connUri( connItem->name() ).connectionInfo() );
+   uri.setDataSource( mLayerProperty.schemaName, mLayerProperty.tableName, mLayerProperty.geometryColName, mLayerProperty.sql, pkColName );
+-  uri.setSrid( QString::number( mLayerProperty.srids[0] ) );
+   uri.setWkbType( mLayerProperty.types[0] );
++  if ( uri.wkbType() != QGis::WKBNoGeometry )
++    uri.setSrid( QString::number( mLayerProperty.srids[0] ) );
+   QgsDebugMsg( QString( "layer uri: %1" ).arg( uri.uri() ) );
+   return uri.uri();
+ }
diff --git a/debian/patches/0001-postgres-provider-also-apply-filterWhereClause-to-fe.patch b/debian/patches/0001-postgres-provider-also-apply-filterWhereClause-to-fe.patch
new file mode 100644
index 0000000..014fe18
--- /dev/null
+++ b/debian/patches/0001-postgres-provider-also-apply-filterWhereClause-to-fe.patch
@@ -0,0 +1,36 @@
+From fe3dc4cfe134adfcae9332a51a1224e54d92c1a8 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Thu, 2 Apr 2015 17:44:36 +0200
+Subject: postgres provider: also apply filterWhereClause to feature iterators
+ (fixes #12499 & #12500)
+Bug: http://hub.qgis.org/issues/12499
+Bug: http://hub.qgis.org/issues/12500
+Origin: https://github.com/qgis/QGIS/commit/fe3dc4cfe134adfcae9332a51a1224e54d92c1a8
+
+(cherry picked from commit 97572244dc699c6d5480f736e38d9246496cef20)
+---
+ src/providers/postgres/qgspostgresfeatureiterator.cpp |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/src/providers/postgres/qgspostgresfeatureiterator.cpp
++++ b/src/providers/postgres/qgspostgresfeatureiterator.cpp
+@@ -569,7 +569,6 @@ void QgsPostgresFeatureIterator::getFeat
+ QgsPostgresFeatureSource::QgsPostgresFeatureSource( const QgsPostgresProvider* p )
+     : mConnInfo( p->mUri.connectionInfo() )
+     , mGeometryColumn( p->mGeometryColumn )
+-    , mSqlWhereClause( p->mSqlWhereClause )
+     , mFields( p->mAttributeFields )
+     , mSpatialColType( p->mSpatialColType )
+     , mRequestedSrid( p->mRequestedSrid )
+@@ -582,6 +581,11 @@ QgsPostgresFeatureSource::QgsPostgresFea
+     , mQuery( p->mQuery )
+     , mShared( p->mShared )
+ {
++  mSqlWhereClause = p->filterWhereClause();
++
++  if ( mSqlWhereClause.startsWith( " WHERE " ) )
++    mSqlWhereClause = mSqlWhereClause.mid( 7 );
++
+   if ( p->mTransaction )
+   {
+     mTransactionConnection = p->mTransaction->connection();
diff --git a/debian/patches/0001-processing-display-X-and-Y-labels-on-the-scatterplot.patch b/debian/patches/0001-processing-display-X-and-Y-labels-on-the-scatterplot.patch
new file mode 100644
index 0000000..9c084ea
--- /dev/null
+++ b/debian/patches/0001-processing-display-X-and-Y-labels-on-the-scatterplot.patch
@@ -0,0 +1,22 @@
+From 7422857b48af78156d4aeb8f8b35ed3de8340f40 Mon Sep 17 00:00:00 2001
+From: Alexander Bruy <alexander.bruy at gmail.com>
+Date: Fri, 10 Apr 2015 16:24:10 +0300
+Subject: [processing] display X and Y labels on the scatterplot (fix #12095)
+Bug: http://hub.qgis.org/issues/12095
+Origin: https://github.com/qgis/QGIS/commit/7422857b48af78156d4aeb8f8b35ed3de8340f40
+
+---
+ python/plugins/processing/algs/qgis/VectorLayerScatterplot.py |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/python/plugins/processing/algs/qgis/VectorLayerScatterplot.py
++++ b/python/plugins/processing/algs/qgis/VectorLayerScatterplot.py
+@@ -70,6 +70,8 @@ class VectorLayerScatterplot(GeoAlgorith
+         values = vector.values(layer, xfieldname, yfieldname)
+         plt.close()
+         plt.scatter(values[xfieldname], values[yfieldname])
++        plt.ylabel(yfieldname)
++        plt.xlabel(xfieldname)
+         plotFilename = output + '.png'
+         lab.savefig(plotFilename)
+         f = open(output, 'w')
diff --git a/debian/patches/0001-processing-fix-interpretation-of-oracle-layers-fixes.patch b/debian/patches/0001-processing-fix-interpretation-of-oracle-layers-fixes.patch
new file mode 100644
index 0000000..e34d238
--- /dev/null
+++ b/debian/patches/0001-processing-fix-interpretation-of-oracle-layers-fixes.patch
@@ -0,0 +1,63 @@
+From ff1b1838d0514e6b1fcb51f98d4204b2197f6aea Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Mon, 20 Apr 2015 11:33:57 +0200
+Subject: processing: fix interpretation of oracle layers (fixes #12590)
+Bug: http://hub.qgis.org/issues/12590
+Origin: https://github.com/qgis/QGIS/commit/ff1b1838d0514e6b1fcb51f98d4204b2197f6aea
+
+Funded by norbit.de
+
+(cherry picked from commit f0daab9c7c188bd0361d7d11652830558231e1b6)
+---
+ .../plugins/processing/algs/gdal/OgrAlgorithm.py   |   33 ++++++++++++++++++--
+ 1 file changed, 31 insertions(+), 2 deletions(-)
+
+--- a/python/plugins/processing/algs/gdal/OgrAlgorithm.py
++++ b/python/plugins/processing/algs/gdal/OgrAlgorithm.py
+@@ -66,8 +66,8 @@ class OgrAlgorithm(GdalAlgorithm):
+                     if not ok:
+                         break
+ 
+-                    dsUri.setUsername( user )
+-                    dsUri.setPassword( passwd )
++                    dsUri.setUsername(user)
++                    dsUri.setPassword(passwd)
+ 
+             if not conn:
+                 raise RuntimeError('Could not connect to PostgreSQL database - check connection info')
+@@ -76,6 +76,35 @@ class OgrAlgorithm(GdalAlgorithm):
+                 QgsCredentials.instance().put(conninfo, user, passwd)
+ 
+             ogrstr = "PG:%s" % dsUri.connectionInfo()
++        elif provider == "oracle":
++            # OCI:user/password at host:port/service:table
++            dsUri = QgsDataSourceURI(layer.dataProvider().dataSourceUri())
++            ogrstr = "OCI:"
++            if dsUri.username() != "":
++                ogrstr += dsUri.username()
++                if dsUri.password() != "":
++                    ogr += "/" + dsUri.password()
++                delim = "@"
++
++            if dsUri.host() != "":
++                ogrstr += delim + dsUri.host()
++                delim = ""
++                if dsUri.port() != "" and dsUri.port() != 1521:
++                    ogrstr += ":%d" % dsUri.port()
++                ogrstr += "/"
++                if dsUri.database() != "":
++                    ogrstr += dsUri.database()
++            elif dsUri.database() != "":
++                ogrstr += delim + dsUri.database()
++
++            if ogrstr == "OCI:":
++                raise RuntimeError('Invalid oracle data source - check connection info')
++
++            ogrstr += ":"
++            if dsUri.schema() != "":
++                ogrstr += dsUri.schema() + "."
++
++            ogrstr += dsUri.table()
+         else:
+             ogrstr = unicode(layer.source()).split("|")[0]
+ 
diff --git a/debian/patches/0001-processing-fix-typo-in-the-algorithm-name-fix-12227.patch b/debian/patches/0001-processing-fix-typo-in-the-algorithm-name-fix-12227.patch
new file mode 100644
index 0000000..2ef19c3
--- /dev/null
+++ b/debian/patches/0001-processing-fix-typo-in-the-algorithm-name-fix-12227.patch
@@ -0,0 +1,333 @@
+From 8ffa4acfdfda4c61cf0b011fb13180ad1ad4964d Mon Sep 17 00:00:00 2001
+From: Alexander Bruy <alexander.bruy at gmail.com>
+Date: Fri, 10 Apr 2015 15:31:31 +0300
+Subject: [processing] fix typo in the algorithm name (fix #12227)
+Bug: http://hub.qgis.org/issues/12227
+Origin: https://github.com/qgis/QGIS/commit/8ffa4acfdfda4c61cf0b011fb13180ad1ad4964d
+
+---
+ .../processing/algs/qgis/QGISAlgorithmProvider.py  |    4 +-
+ .../processing/algs/qgis/SymetricalDifference.py   |  146 --------------------
+ .../processing/algs/qgis/SymmetricalDifference.py  |  146 ++++++++++++++++++++
+ 3 files changed, 148 insertions(+), 148 deletions(-)
+ delete mode 100644 python/plugins/processing/algs/qgis/SymetricalDifference.py
+ create mode 100644 python/plugins/processing/algs/qgis/SymmetricalDifference.py
+
+--- a/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py
++++ b/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py
+@@ -39,7 +39,7 @@ from processing.core.AlgorithmProvider i
+ from processing.script.ScriptUtils import ScriptUtils
+ 
+ from RegularPoints import RegularPoints
+-from SymetricalDifference import SymetricalDifference
++from SymmetricalDifference import SymmetricalDifference
+ from VectorSplit import VectorSplit
+ from VectorGrid import VectorGrid
+ from RandomExtract import RandomExtract
+@@ -152,7 +152,7 @@ class QGISAlgorithmProvider(AlgorithmPro
+                         RandomSelection(), RandomSelectionWithinSubsets(),
+                         SelectByLocation(), RandomExtract(),
+                         RandomExtractWithinSubsets(), ExtractByLocation(),
+-                        SpatialJoin(), RegularPoints(), SymetricalDifference(),
++                        SpatialJoin(), RegularPoints(), SymmetricalDifference(),
+                         VectorSplit(), VectorGrid(), DeleteColumn(),
+                         DeleteDuplicateGeometries(), TextToFloat(),
+                         ExtractByAttribute(), SelectByAttribute(), Grid(),
+--- a/python/plugins/processing/algs/qgis/SymetricalDifference.py
++++ /dev/null
+@@ -1,146 +0,0 @@
+-# -*- coding: utf-8 -*-
+-
+-"""
+-***************************************************************************
+-    SymetricalDifference.py
+-    ---------------------
+-    Date                 : September 2014
+-    Copyright            : (C) 2014 by Alexander Bruy
+-    Email                : alexander dot bruy at gmail dot com
+-***************************************************************************
+-*                                                                         *
+-*   This program is free software; you can redistribute it and/or modify  *
+-*   it under the terms of the GNU General Public License as published by  *
+-*   the Free Software Foundation; either version 2 of the License, or     *
+-*   (at your option) any later version.                                   *
+-*                                                                         *
+-***************************************************************************
+-"""
+-
+-__author__ = 'Alexander Bruy'
+-__date__ = 'September 2014'
+-__copyright__ = '(C) 2014, Alexander Bruy'
+-
+-# This will get replaced with a git SHA1 when you do a git archive
+-
+-__revision__ = '$Format:%H$'
+-
+-from qgis.core import QgsFeature, QgsGeometry, QgsFeatureRequest, NULL
+-from processing.core.ProcessingLog import ProcessingLog
+-from processing.core.GeoAlgorithm import GeoAlgorithm
+-from processing.core.parameters import ParameterVector
+-from processing.core.outputs import OutputVector
+-from processing.tools import dataobjects, vector
+-
+-
+-class SymetricalDifference(GeoAlgorithm):
+-
+-    INPUT = 'INPUT'
+-    OVERLAY = 'OVERLAY'
+-    OUTPUT = 'OUTPUT'
+-
+-    def defineCharacteristics(self):
+-        self.name = 'Symetrical difference'
+-        self.group = 'Vector overlay tools'
+-        self.addParameter(ParameterVector(self.INPUT,
+-            self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY]))
+-        self.addParameter(ParameterVector(self.OVERLAY,
+-            self.tr('Difference layer'), [ParameterVector.VECTOR_TYPE_ANY]))
+-        self.addOutput(OutputVector(self.OUTPUT,
+-            self.tr('Symetrical difference')))
+-
+-    def processAlgorithm(self, progress):
+-        layerA = dataobjects.getObjectFromUri(
+-            self.getParameterValue(self.INPUT))
+-        layerB = dataobjects.getObjectFromUri(
+-            self.getParameterValue(self.OVERLAY))
+-
+-        providerA = layerA.dataProvider()
+-        providerB = layerB.dataProvider()
+-
+-        GEOS_EXCEPT = True
+-        FEATURE_EXCEPT = True
+-
+-        fields = vector.combineVectorFields(layerA, layerB)
+-        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
+-            fields, providerA.geometryType(), providerA.crs())
+-
+-        featB = QgsFeature()
+-        outFeat = QgsFeature()
+-
+-        indexA = vector.spatialindex(layerB)
+-        indexB = vector.spatialindex(layerA)
+-
+-        featuresA = vector.features(layerA)
+-        featuresB = vector.features(layerB)
+-
+-        total = 100.0 / (len(featuresA) * len(featuresB))
+-        count = 0
+-
+-        for featA in featuresA:
+-            add = True
+-            geom = QgsGeometry(featA.geometry())
+-            diffGeom = QgsGeometry(geom)
+-            attrs = featA.attributes()
+-            intersects = indexA.intersects(geom.boundingBox())
+-            for i in intersects:
+-                providerB.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
+-                tmpGeom = QgsGeometry(featB.geometry())
+-                try:
+-                    if diffGeom.intersects(tmpGeom):
+-                        diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
+-                except:
+-                    add = False
+-                    GEOS_EXCEPT = False
+-                    break
+-            if add:
+-                try:
+-                    outFeat.setGeometry(diffGeom)
+-                    outFeat.setAttributes(attrs)
+-                    writer.addFeature(outFeat)
+-                except:
+-                    FEATURE_EXCEPT = False
+-                    continue
+-
+-            count += 1
+-            progress.setPercentage(int(count * total))
+-
+-        length = len(providerA.fields())
+-
+-        for featA in featuresB:
+-            add = True
+-            geom = QgsGeometry(featA.geometry())
+-            diffGeom = QgsGeometry(geom)
+-            attrs = featA.attributes()
+-            attrs = [NULL] * length + attrs
+-            intersects = indexB.intersects(geom.boundingBox())
+-            for i in intersects:
+-                providerA.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
+-                tmpGeom = QgsGeometry(featB.geometry())
+-                try:
+-                    if diffGeom.intersects(tmpGeom):
+-                        diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
+-                except:
+-                    add = False
+-                    GEOS_EXCEPT = False
+-                    break
+-            if add:
+-                try:
+-                    outFeat.setGeometry(diffGeom)
+-                    outFeat.setAttributes(attrs)
+-                    writer.addFeature(outFeat)
+-                except:
+-                    FEATURE_EXCEPT = False
+-                    continue
+-
+-            count += 1
+-            progress.setPercentage(int(count * total))
+-
+-        del writer
+-
+-        if not GEOS_EXCEPT:
+-            ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
+-                self.tr('Geometry exception while computing symetrical difference'))
+-        if not FEATURE_EXCEPT:
+-            ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
+-                self.tr('Feature exception while computing symetrical difference'))
+--- /dev/null
++++ b/python/plugins/processing/algs/qgis/SymmetricalDifference.py
+@@ -0,0 +1,146 @@
++# -*- coding: utf-8 -*-
++
++"""
++***************************************************************************
++    SymetricalDifference.py
++    ---------------------
++    Date                 : September 2014
++    Copyright            : (C) 2014 by Alexander Bruy
++    Email                : alexander dot bruy at gmail dot com
++***************************************************************************
++*                                                                         *
++*   This program is free software; you can redistribute it and/or modify  *
++*   it under the terms of the GNU General Public License as published by  *
++*   the Free Software Foundation; either version 2 of the License, or     *
++*   (at your option) any later version.                                   *
++*                                                                         *
++***************************************************************************
++"""
++
++__author__ = 'Alexander Bruy'
++__date__ = 'September 2014'
++__copyright__ = '(C) 2014, Alexander Bruy'
++
++# This will get replaced with a git SHA1 when you do a git archive
++
++__revision__ = '$Format:%H$'
++
++from qgis.core import QgsFeature, QgsGeometry, QgsFeatureRequest, NULL
++from processing.core.ProcessingLog import ProcessingLog
++from processing.core.GeoAlgorithm import GeoAlgorithm
++from processing.core.parameters import ParameterVector
++from processing.core.outputs import OutputVector
++from processing.tools import dataobjects, vector
++
++
++class SymmetricalDifference(GeoAlgorithm):
++
++    INPUT = 'INPUT'
++    OVERLAY = 'OVERLAY'
++    OUTPUT = 'OUTPUT'
++
++    def defineCharacteristics(self):
++        self.name = 'Symmetrical difference'
++        self.group = 'Vector overlay tools'
++        self.addParameter(ParameterVector(self.INPUT,
++            self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY]))
++        self.addParameter(ParameterVector(self.OVERLAY,
++            self.tr('Difference layer'), [ParameterVector.VECTOR_TYPE_ANY]))
++        self.addOutput(OutputVector(self.OUTPUT,
++            self.tr('Symetrical difference')))
++
++    def processAlgorithm(self, progress):
++        layerA = dataobjects.getObjectFromUri(
++            self.getParameterValue(self.INPUT))
++        layerB = dataobjects.getObjectFromUri(
++            self.getParameterValue(self.OVERLAY))
++
++        providerA = layerA.dataProvider()
++        providerB = layerB.dataProvider()
++
++        GEOS_EXCEPT = True
++        FEATURE_EXCEPT = True
++
++        fields = vector.combineVectorFields(layerA, layerB)
++        writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
++            fields, providerA.geometryType(), providerA.crs())
++
++        featB = QgsFeature()
++        outFeat = QgsFeature()
++
++        indexA = vector.spatialindex(layerB)
++        indexB = vector.spatialindex(layerA)
++
++        featuresA = vector.features(layerA)
++        featuresB = vector.features(layerB)
++
++        total = 100.0 / (len(featuresA) * len(featuresB))
++        count = 0
++
++        for featA in featuresA:
++            add = True
++            geom = QgsGeometry(featA.geometry())
++            diffGeom = QgsGeometry(geom)
++            attrs = featA.attributes()
++            intersects = indexA.intersects(geom.boundingBox())
++            for i in intersects:
++                providerB.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
++                tmpGeom = QgsGeometry(featB.geometry())
++                try:
++                    if diffGeom.intersects(tmpGeom):
++                        diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
++                except:
++                    add = False
++                    GEOS_EXCEPT = False
++                    break
++            if add:
++                try:
++                    outFeat.setGeometry(diffGeom)
++                    outFeat.setAttributes(attrs)
++                    writer.addFeature(outFeat)
++                except:
++                    FEATURE_EXCEPT = False
++                    continue
++
++            count += 1
++            progress.setPercentage(int(count * total))
++
++        length = len(providerA.fields())
++
++        for featA in featuresB:
++            add = True
++            geom = QgsGeometry(featA.geometry())
++            diffGeom = QgsGeometry(geom)
++            attrs = featA.attributes()
++            attrs = [NULL] * length + attrs
++            intersects = indexB.intersects(geom.boundingBox())
++            for i in intersects:
++                providerA.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
++                tmpGeom = QgsGeometry(featB.geometry())
++                try:
++                    if diffGeom.intersects(tmpGeom):
++                        diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
++                except:
++                    add = False
++                    GEOS_EXCEPT = False
++                    break
++            if add:
++                try:
++                    outFeat.setGeometry(diffGeom)
++                    outFeat.setAttributes(attrs)
++                    writer.addFeature(outFeat)
++                except:
++                    FEATURE_EXCEPT = False
++                    continue
++
++            count += 1
++            progress.setPercentage(int(count * total))
++
++        del writer
++
++        if not GEOS_EXCEPT:
++            ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
++                self.tr('Geometry exception while computing symetrical difference'))
++        if not FEATURE_EXCEPT:
++            ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
++                self.tr('Feature exception while computing symetrical difference'))
diff --git a/debian/patches/0001-processing-save-last-used-models-scripts-directory-f.patch b/debian/patches/0001-processing-save-last-used-models-scripts-directory-f.patch
new file mode 100644
index 0000000..01258d9
--- /dev/null
+++ b/debian/patches/0001-processing-save-last-used-models-scripts-directory-f.patch
@@ -0,0 +1,61 @@
+From 7f94cf7de851638f1c7386901c2fd889f37cb18b Mon Sep 17 00:00:00 2001
+From: Alexander Bruy <alexander.bruy at gmail.com>
+Date: Fri, 10 Apr 2015 16:20:04 +0300
+Subject: [processing] save last used models/scripts directory (fix #12536)
+Bug: http://hub.qgis.org/issues/12536
+Origin: https://github.com/qgis/QGIS/commit/7f94cf7de851638f1c7386901c2fd889f37cb18b
+
+---
+ python/plugins/processing/modeler/AddModelFromFileAction.py |    8 +++++++-
+ python/plugins/processing/script/AddScriptFromFileAction.py |    8 ++++++--
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+--- a/python/plugins/processing/modeler/AddModelFromFileAction.py
++++ b/python/plugins/processing/modeler/AddModelFromFileAction.py
+@@ -28,6 +28,7 @@ __revision__ = '$Format:%H$'
+ import os
+ import shutil
+ from PyQt4.QtGui import QIcon, QFileDialog, QMessageBox
++from PyQt4.QtCore import QSettings, QFileInfo
+ from processing.gui.ToolboxAction import ToolboxAction
+ from processing.modeler.ModelerAlgorithm import ModelerAlgorithm
+ from processing.modeler.WrongModelException import WrongModelException
+@@ -43,11 +44,16 @@ class AddModelFromFileAction(ToolboxActi
+         return QIcon(os.path.dirname(__file__) + '/../images/model.png')
+ 
+     def execute(self):
++        settings = QSettings()
++        lastDir = settings.value('Processing/lastModelsDir', '')
+         filename = QFileDialog.getOpenFileName(self.toolbox,
+-            self.tr('Open model', 'AddModelFromFileAction'), None,
++            self.tr('Open model', 'AddModelFromFileAction'), lastDir,
+             self.tr('Processing model files (*.model *.MODEL)', 'AddModelFromFileAction'))
+         if filename:
+             try:
++                settings.setValue('Processing/lastModelsDir',
++                    QFileInfo(fileName).absoluteDir().absolutePath())
++
+                 ModelerAlgorithm.fromFile(filename)
+             except WrongModelException:
+                 QMessageBox.warning(
+--- a/python/plugins/processing/script/AddScriptFromFileAction.py
++++ b/python/plugins/processing/script/AddScriptFromFileAction.py
+@@ -42,12 +42,16 @@ class AddScriptFromFileAction(ToolboxAct
+         return QIcon(':/processing/images/script.png')
+ 
+     def execute(self):
++        settings = QSettings()
++        lastDir = settings.value('Processing/lastScriptsDir', '')
+         filename = QFileDialog.getOpenFileName(self.toolbox,
+             self.tr('Script files', 'AddScriptFromFileAction'), None,
+-            self.tr('Script files (*.py *.PY)', 'AddScriptFromFileAction')
+-        )
++            self.tr('Script files (*.py *.PY)', 'AddScriptFromFileAction'))
+         if filename:
+             try:
++                settings.setValue('Processing/lastScriptsDir',
++                    QFileInfo(fileName).absoluteDir().absolutePath())
++
+                 script = ScriptAlgorithm(filename)
+             except WrongScriptException:
+                 QMessageBox.warning(self.toolbox,
diff --git a/debian/patches/0001-processing-set-CRS-for-output-grid-fix-12518.patch b/debian/patches/0001-processing-set-CRS-for-output-grid-fix-12518.patch
new file mode 100644
index 0000000..0bfc627
--- /dev/null
+++ b/debian/patches/0001-processing-set-CRS-for-output-grid-fix-12518.patch
@@ -0,0 +1,59 @@
+From d808426ea35402781eacc4e16c597f92cce6eb4d Mon Sep 17 00:00:00 2001
+From: Alexander Bruy <alexander.bruy at gmail.com>
+Date: Fri, 10 Apr 2015 16:44:37 +0300
+Subject: [processing] set CRS for output grid (fix #12518)
+Bug: http://hub.qgis.org/issues/12518
+Origin: https://github.com/qgis/QGIS/commit/d808426ea35402781eacc4e16c597f92cce6eb4d
+
+---
+ python/plugins/processing/algs/qgis/Grid.py |   10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+--- a/python/plugins/processing/algs/qgis/Grid.py
++++ b/python/plugins/processing/algs/qgis/Grid.py
+@@ -34,18 +34,15 @@ from processing.core.GeoAlgorithmExecuti
+ from processing.core.parameters import ParameterExtent
+ from processing.core.parameters import ParameterNumber
+ from processing.core.parameters import ParameterSelection
++from processing.core.parameters import ParameterCrs
+ from processing.core.outputs import OutputVector
+ 
+ 
+ class Grid(GeoAlgorithm):
+     TYPE = 'TYPE'
+     EXTENT = 'EXTENT'
+-    WIDTH = 'WIDTH'
+-    HEIGHT = 'HEIGHT'
+     HSPACING = 'HSPACING'
+     VSPACING = 'VSPACING'
+-    CENTERX = 'CENTERX'
+-    CENTERY = 'CENTERY'
+     CRS = 'CRS'
+     OUTPUT = 'OUTPUT'
+ 
+@@ -67,14 +64,16 @@ class Grid(GeoAlgorithm):
+             self.tr('Horizontal spacing'), default=10.0))
+         self.addParameter(ParameterNumber(self.VSPACING,
+             self.tr('Vertical spacing'), default=10.0))
++        self.addParameter(ParameterCrs(self.CRS, 'Grid CRS'))
+ 
+-        self.addOutput(OutputVector(self.OUTPUT, self.tr('Output')))
++        self.addOutput(OutputVector(self.OUTPUT, self.tr('Grid')))
+ 
+     def processAlgorithm(self, progress):
+         idx = self.getParameterValue(self.TYPE)
+         extent = self.getParameterValue(self.EXTENT).split(',')
+         hSpacing = self.getParameterValue(self.HSPACING)
+         vSpacing = self.getParameterValue(self.VSPACING)
++        crs = QgsCoordinateReferenceSystem(self.getParameterValue(self.CRS))
+ 
+         bbox = QgsRectangle(float(extent[0]), float(extent[2]),
+                             float(extent[1]), float(extent[3]))
+@@ -85,7 +84,6 @@ class Grid(GeoAlgorithm):
+         centerY = bbox.center().y()
+         originX = centerX - width / 2.0
+         originY = centerY - height / 2.0
+-        crs = QgsCoordinateReferenceSystem(self.getParameterValue(self.CRS))
+ 
+         if hSpacing <= 0 or vSpacing <= 0:
+             raise GeoAlgorithmExecutionException(
diff --git a/debian/patches/0001-qoci-spatial-driver-cleanup-session-connection-when-.patch b/debian/patches/0001-qoci-spatial-driver-cleanup-session-connection-when-.patch
new file mode 100644
index 0000000..0f4700f
--- /dev/null
+++ b/debian/patches/0001-qoci-spatial-driver-cleanup-session-connection-when-.patch
@@ -0,0 +1,29 @@
+From 4789c2361dd5d3e336838492af757f10310d0531 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Tue, 17 Mar 2015 12:35:09 +0100
+Subject: qoci spatial driver: cleanup session & connection when login failed
+Origin: https://github.com/qgis/QGIS/commit/4789c2361dd5d3e336838492af757f10310d0531
+
+---
+ src/providers/oracle/ocispatial/qsql_ocispatial.cpp |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/src/providers/oracle/ocispatial/qsql_ocispatial.cpp
++++ b/src/providers/oracle/ocispatial/qsql_ocispatial.cpp
+@@ -3449,10 +3449,16 @@ bool QOCISpatialDriver::open( const QStr
+     setLastError( qMakeError( tr( "Unable to logon" ), QSqlError::ConnectionError, d->err ) );
+     setOpenError( true );
+     if ( d->authp )
++    {
++      OCISessionEnd( d->svc, d->err, d->authp, OCI_DEFAULT );
+       OCIHandleFree( d->authp, OCI_HTYPE_SESSION );
++    }
+     d->authp = 0;
+     if ( d->srvhp )
++    {
++      OCIServerDetach( d->srvhp, d->err, OCI_DEFAULT );
+       OCIHandleFree( d->srvhp, OCI_HTYPE_SERVER );
++    }
+     d->srvhp = 0;
+     return false;
+   }
diff --git a/debian/patches/0001-remove-duplicate-condition.patch b/debian/patches/0001-remove-duplicate-condition.patch
new file mode 100644
index 0000000..b683b87
--- /dev/null
+++ b/debian/patches/0001-remove-duplicate-condition.patch
@@ -0,0 +1,25 @@
+From a9040067b4e29d876f3e2e8597f9e91aabb0eab1 Mon Sep 17 00:00:00 2001
+From: Alexander Bruy <alexander.bruy at gmail.com>
+Date: Thu, 9 Apr 2015 20:10:42 +0300
+Subject: remove duplicate condition
+Origin: https://github.com/qgis/QGIS/commit/a9040067b4e29d876f3e2e8597f9e91aabb0eab1
+
+---
+ python/plugins/processing/algs/gdal/rasterize.py |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/python/plugins/processing/algs/gdal/rasterize.py
++++ b/python/plugins/processing/algs/gdal/rasterize.py
+@@ -138,10 +138,11 @@ class rasterize(OgrAlgorithm):
+                arguments.append('-tr')
+                arguments.append(str(self.getParameterValue(self.WIDTH)))
+                arguments.append(str(self.getParameterValue(self.HEIGHT)))
+-        if not writeOver:
++
+            if len(noData) > 0:
+               arguments.append('-a_nodata')
+               arguments.append(noData)
++
+         if (GdalUtils.getFormatShortNameFromFilename(out) == "GTiff") and (writeOver is False):
+             arguments.append("-co COMPRESS="+compress)
+             if compress == 'JPEG':
diff --git a/debian/patches/0001-remove-unused-button-in-categorized-renderer-ui.patch b/debian/patches/0001-remove-unused-button-in-categorized-renderer-ui.patch
new file mode 100644
index 0000000..2c8313b
--- /dev/null
+++ b/debian/patches/0001-remove-unused-button-in-categorized-renderer-ui.patch
@@ -0,0 +1,49 @@
+From 3a2d2f6327feddd10a1db755651aa7a42c25d960 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 17 Apr 2015 15:58:50 +0200
+Subject: remove unused button in categorized renderer ui
+Origin: https://github.com/qgis/QGIS/commit/3a2d2f6327feddd10a1db755651aa7a42c25d960
+
+(cherry picked from commit 812d5b11832c31a875048ceda6609814b194a5ee)
+---
+ resources/customization.xml                    |    1 -
+ src/ui/qgscategorizedsymbolrendererv2widget.ui |   11 -----------
+ 2 files changed, 12 deletions(-)
+
+--- a/resources/customization.xml
++++ b/resources/customization.xml
+@@ -391,7 +391,6 @@
+     <widget objectName="btnAddCategory" class="QPushButton" label="Add"/>
+     <widget objectName="btnDeleteCategories" class="QPushButton" label="Delete"/>
+     <widget objectName="btnDeleteAllCategories" class="QPushButton" label="Delete all"/>
+-    <widget objectName="btnJoinCategories" class="QPushButton" label="Join"/>
+     <widget objectName="btnAdvanced" class="QPushButton" label="Advanced"/>
+   </widget>
+   <widget objectName="QgsTileScaleWidget" class="QWidget" label="">
+--- a/src/ui/qgscategorizedsymbolrendererv2widget.ui
++++ b/src/ui/qgscategorizedsymbolrendererv2widget.ui
+@@ -177,16 +177,6 @@
+       </spacer>
+      </item>
+      <item>
+-      <widget class="QPushButton" name="btnJoinCategories">
+-       <property name="enabled">
+-        <bool>false</bool>
+-       </property>
+-       <property name="text">
+-        <string>Join</string>
+-       </property>
+-      </widget>
+-     </item>
+-     <item>
+       <widget class="QPushButton" name="btnAdvanced">
+        <property name="text">
+         <string>Advanced</string>
+@@ -219,7 +209,6 @@
+   <tabstop>btnAddCategory</tabstop>
+   <tabstop>btnDeleteCategories</tabstop>
+   <tabstop>btnDeleteAllCategories</tabstop>
+-  <tabstop>btnJoinCategories</tabstop>
+   <tabstop>btnAdvanced</tabstop>
+  </tabstops>
+  <resources/>
diff --git a/debian/patches/0001-server-deduce-service-wms-from-request-if-not-explic.patch b/debian/patches/0001-server-deduce-service-wms-from-request-if-not-explic.patch
new file mode 100644
index 0000000..dcac50d
--- /dev/null
+++ b/debian/patches/0001-server-deduce-service-wms-from-request-if-not-explic.patch
@@ -0,0 +1,31 @@
+From 3229813fb4d085ac84210717afc06731e0a883ff Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 20 Mar 2015 15:24:15 +0100
+Subject: server: deduce service wms from request if not explictly given
+ (SERVICE not mandatory for WMS GetMap / GetFeatureInfo)
+Origin: https://github.com/qgis/QGIS/commit/3229813fb4d085ac84210717afc06731e0a883ff
+
+(cherry picked from commit 3552b83474682f3c2fc1515d4225b906a0cab74c)
+---
+ src/server/qgis_map_serv.cpp |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/src/server/qgis_map_serv.cpp
++++ b/src/server/qgis_map_serv.cpp
+@@ -392,6 +392,16 @@ int main( int argc, char * argv[] )
+     //Service parameter
+     QString serviceString = theRequestHandler->parameter( "SERVICE" );
+ 
++    if ( serviceString.isEmpty() )
++    {
++      // SERVICE not mandatory for WMS 1.3.0 GetMap & GetFeatureInfo
++      QString requestString = theRequestHandler->parameter( "REQUEST" );
++      if ( requestString == "GetMap" || requestString == "GetFeatureInfo" )
++      {
++        serviceString = "WMS";
++      }
++    }
++
+     // Enter core services main switch
+     if ( !theRequestHandler->exceptionRaised() )
+     {
diff --git a/debian/patches/0001-server-fix-LayerDrawingOrder-fixes-12484.patch b/debian/patches/0001-server-fix-LayerDrawingOrder-fixes-12484.patch
new file mode 100644
index 0000000..adca8720
--- /dev/null
+++ b/debian/patches/0001-server-fix-LayerDrawingOrder-fixes-12484.patch
@@ -0,0 +1,403 @@
+From d92e4d64273f1318f102ef35218556569dd21400 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Thu, 9 Apr 2015 09:55:30 +0200
+Subject: server: fix 'LayerDrawingOrder' (fixes #12484)
+Bug: http://hub.qgis.org/issues/12484
+Origin: https://github.com/qgis/QGIS/commit/d92e4d64273f1318f102ef35218556569dd21400
+
+cherry picked from de5a3f5 + 04324fd
+---
+ src/server/qgsserverprojectparser.cpp |   16 ++-
+ src/server/qgsserverprojectparser.h   |    4 +
+ src/server/qgswmsprojectparser.cpp    |  211 +++++++--------------------------
+ src/server/qgswmsprojectparser.h      |   12 +-
+ 4 files changed, 65 insertions(+), 178 deletions(-)
+
+--- a/src/server/qgsserverprojectparser.cpp
++++ b/src/server/qgsserverprojectparser.cpp
+@@ -63,6 +63,18 @@ QgsServerProjectParser::QgsServerProject
+ 
+     mRestrictedLayers = findRestrictedLayers();
+     mUseLayerIDs = findUseLayerIDs();
++
++    mCustomLayerOrder.clear();
++
++    QDomElement customOrder = mXMLDoc->documentElement().firstChildElement( "layer-tree-canvas" ).firstChildElement( "custom-order" );
++    if ( customOrder.attribute( "enabled" ) == "1" )
++    {
++      QDomNodeList items = customOrder.childNodes();
++      for ( int i = 0; i < items.size(); ++i )
++      {
++        mCustomLayerOrder << items.item( i ).toElement().text();
++      }
++    }
+   }
+ }
+ 
+@@ -349,7 +361,7 @@ int QgsServerProjectParser::numberOfLaye
+ 
+ bool QgsServerProjectParser::updateLegendDrawingOrder() const
+ {
+-  return legendElem().attribute( "updateDrawingOrder", "true" ).compare( "true", Qt::CaseInsensitive ) == 0;
++  return !mCustomLayerOrder.isEmpty();
+ }
+ 
+ void QgsServerProjectParser::serviceCapabilities( QDomElement& parentElement, QDomDocument& doc, const QString& service, bool sia2045 ) const
+@@ -1069,7 +1081,7 @@ bool QgsServerProjectParser::findUseLaye
+ void QgsServerProjectParser::layerFromLegendLayer( const QDomElement& legendLayerElem, QMap< int, QgsMapLayer*>& layers, bool useCache ) const
+ {
+   QString id = legendLayerElem.firstChild().firstChild().toElement().attribute( "layerid" );
+-  int drawingOrder = updateLegendDrawingOrder() ? -1 : legendLayerElem.attribute( "drawingOrder", "-1" ).toInt();
++  int drawingOrder = updateLegendDrawingOrder() ? -1 : mCustomLayerOrder.indexOf( id );
+ 
+   QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( id );
+   if ( layerIt != mProjectLayerElementsById.constEnd() )
+--- a/src/server/qgsserverprojectparser.h
++++ b/src/server/qgsserverprojectparser.h
+@@ -126,6 +126,8 @@ class QgsServerProjectParser
+ 
+     void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc, const QString& service, bool sia2045 = false ) const;
+ 
++    QStringList customLayerOrder() const { return mCustomLayerOrder; }
++
+   private:
+ 
+     /**Content of project file*/
+@@ -156,6 +158,8 @@ class QgsServerProjectParser
+     /**Returns a complete string set with all the restricted layer names (layers/groups that are not to be published)*/
+     QSet<QString> findRestrictedLayers() const;
+ 
++    QStringList mCustomLayerOrder;
++
+     bool findUseLayerIDs() const;
+ 
+     /**Adds sublayers of an embedded group to layer set*/
+--- a/src/server/qgswmsprojectparser.cpp
++++ b/src/server/qgswmsprojectparser.cpp
+@@ -72,11 +72,6 @@ void QgsWMSProjectParser::layersAndStyle
+     return;
+   }
+ 
+-  if ( fullProjectSettings )
+-  {
+-    addDrawingOrder( parentElement, doc );
+-  }
+-
+   QMap<QString, QgsMapLayer *> layerMap;
+   mProjectParser->projectLayerMap( layerMap );
+ 
+@@ -96,10 +91,18 @@ void QgsWMSProjectParser::layersAndStyle
+ 
+   QDomElement legendElem = mProjectParser->legendElem();
+ 
+-  addLayers( doc, layerParentElem, legendElem, layerMap, nonIdentifiableLayers, version, fullProjectSettings );
++  QHash<QString, QString> idNameMap;
++  QStringList layerIDList;
++
++  addLayers( doc, layerParentElem, legendElem, layerMap, nonIdentifiableLayers, version, fullProjectSettings, idNameMap, layerIDList );
+ 
+   parentElement.appendChild( layerParentElem );
+   mProjectParser->combineExtentAndCrsOfGroupChildren( layerParentElem, doc, true );
++
++  if ( fullProjectSettings )
++  {
++    addDrawingOrder( parentElement, doc, idNameMap, layerIDList );
++  }
+ }
+ 
+ QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName, const QString& styleName, bool useCache ) const
+@@ -734,177 +737,46 @@ QStringList QgsWMSProjectParser::identif
+   return disabledList;
+ }
+ 
+-void QgsWMSProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const
+-{
+-  const QDomDocument* projectDoc = mProjectParser->xmlDocument();
+-  if ( !projectDoc )
+-  {
+-    return;
+-  }
+-
+-  //find legend section
+-  QDomElement legendElement = projectDoc->documentElement().firstChildElement( "legend" );
+-  if ( legendElement.isNull() )
+-  {
+-    return;
+-  }
+-
+-  bool useDrawingOrder = legendElement.attribute( "updateDrawingOrder" ) == "false";
+-  QMap<int, QString> orderedLayerNames;
+-
+-  QDomNodeList legendChildren = legendElement.childNodes();
+-  QDomElement childElem;
+-  for ( int i = 0; i < legendChildren.size(); ++i )
+-  {
+-    addDrawingOrder( legendChildren.at( i ).toElement(), useDrawingOrder, orderedLayerNames );
+-  }
+-
+-  QStringList layerList;
+-  QMap<int, QString>::const_iterator nameIt = orderedLayerNames.constBegin();
+-  for ( ; nameIt != orderedLayerNames.constEnd(); ++nameIt )
+-  {
+-    layerList.prepend( nameIt.value() );
+-  }
+-
+-  QDomElement layerDrawingOrderElem = doc.createElement( "LayerDrawingOrder" );
+-  QDomText drawingOrderText = doc.createTextNode( layerList.join( "," ) );
+-  layerDrawingOrderElem.appendChild( drawingOrderText );
+-  parentElem.appendChild( layerDrawingOrderElem );
+-}
+-
+-void QgsWMSProjectParser::addDrawingOrderEmbeddedGroup( QDomElement groupElem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList ) const
++void QgsWMSProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& doc, const QHash<QString, QString> &idNameMap, const QStringList &layerIDList ) const
+ {
+-  if ( groupElem.isNull() )
+-  {
+-    return;
+-  }
+-
+-  QString project = mProjectParser->convertToAbsolutePath( groupElem.attribute( "project" ) );
+-  if ( project.isEmpty() )
+-  {
+-    return;
+-  }
+-
+-  int embedDrawingOrder = groupElem.attribute( "drawingOrder", "-1" ).toInt();
+-  QgsWMSProjectParser* p = dynamic_cast<QgsWMSProjectParser*>( QgsConfigCache::instance()->wmsConfiguration( project ) );
+-  if ( !p )
+-  {
+-    return;
+-  }
++  QStringList layerList( mProjectParser->customLayerOrder() );
+ 
+-  const QDomDocument* doc = p->mProjectParser->xmlDocument();
+-  if ( !doc )
++  if ( layerList.isEmpty() )
+   {
+-    return;
++    layerList = layerIDList;
+   }
+ 
+-  //find requested group
+-  QString groupName = groupElem.attribute( "name" );
+-  QDomElement embeddedGroupElem; //group element in source project file
+-  QDomNodeList groupList = doc->elementsByTagName( "legendgroup" );
+-  for ( int i = 0; i < groupList.size(); ++i )
++  if ( !mProjectParser->useLayerIDs() )
+   {
+-    if ( groupList.at( i ).toElement().attribute( "name" ) == groupName )
++    int i = 0;
++    while ( i < layerList.size() )
+     {
+-      embeddedGroupElem = groupList.at( i ).toElement();
+-      break;
+-    }
+-  }
+-
+-  if ( embeddedGroupElem.isNull() ) //group does not exist in project file
+-  {
+-    return;
+-  }
+-
+-  //legend or custom drawing order in embedded project?
+-  bool updateDrawingOrder = true;
+-  QDomNodeList legendNode = doc->elementsByTagName( "legend" );
+-  if ( legendNode.size() > 0 )
+-  {
+-    updateDrawingOrder = ( legendNode.at( 0 ).toElement().attribute( "updateDrawingOrder" ) == "true" );
+-  }
+-
+-  QDomNodeList layerNodeList = embeddedGroupElem.elementsByTagName( "legendlayer" );
+-  QDomElement layerElem;
+-  QMap<int, QString > layerNames;
+-  QString layerName;
+-  for ( int i = 0; i < layerNodeList.size(); ++i )
+-  {
+-    layerElem = layerNodeList.at( i ).toElement();
+-    layerName = mProjectParser->useLayerIDs() ? layerElem.attribute( "id" ) : layerElem.attribute( "name" );
+-
+-    int layerDrawingOrder = updateDrawingOrder ? -1 : layerElem.attribute( "drawingOrder", "-1" ).toInt();
+-    if ( layerDrawingOrder == -1 )
+-    {
+-      layerNames.insert( layerNames.size(), layerName );
+-    }
+-    else
+-    {
+-      orderedLayerList.insert( orderedLayerList.size(), layerName );
+-    }
+-  }
+-
+-  if ( useDrawingOrder )
+-  {
+-    QMapIterator<int, QString > layerNamesIt( layerNames );
+-    layerNamesIt.toBack();
+-    while ( layerNamesIt.hasPrevious() )
+-    {
+-      layerNamesIt.previous();
+-      orderedLayerList.insertMulti( embedDrawingOrder, layerNamesIt.value() );
+-    }
+-  }
+-  else
+-  {
+-    QMap<int, QString >::const_iterator layerNamesIt = layerNames.constBegin();
+-    for ( ; layerNamesIt != layerNames.constEnd(); ++layerNamesIt )
+-    {
+-      orderedLayerList.insert( orderedLayerList.size(), layerNamesIt.value() );
+-    }
+-  }
+-}
+-
+-void QgsWMSProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList ) const
+-{
+-  if ( elem.isNull() )
+-  {
+-    return;
+-  }
+-
+-  if ( elem.tagName() == "legendgroup" )
+-  {
+-    if ( elem.attribute( "embedded" ) == "1" )
+-    {
+-      addDrawingOrderEmbeddedGroup( elem, useDrawingOrder, orderedLayerList );
+-    }
+-    else
+-    {
+-      QDomNodeList groupChildren = elem.childNodes();
+-      for ( int i = 0; i < groupChildren.size(); ++i )
++      if ( idNameMap.contains( layerList[i] ) )
+       {
+-        addDrawingOrder( groupChildren.at( i ).toElement(), useDrawingOrder, orderedLayerList );
++        layerList[i] = idNameMap[ layerList[i] ];
++        ++i;
++      }
++      else
++      {
++        QgsDebugMsg( "layer not found" );
++        layerList.removeAt( i );
+       }
+     }
+   }
+-  else if ( elem.tagName() == "legendlayer" )
++
++  if ( !layerList.isEmpty() )
+   {
+-    QString layerName = mProjectParser->useLayerIDs()
+-                        ? mProjectParser->layerIdFromLegendLayer( elem )
+-                        : elem.attribute( "name" );
++    QStringList reversedList;
++    for ( int i = layerList.size() - 1; i >= 0; --i )
++      reversedList << layerList[ i ];
+ 
+-    if ( useDrawingOrder )
+-    {
+-      int drawingOrder = elem.attribute( "drawingOrder", "-1" ).toInt();
+-      orderedLayerList.insert( drawingOrder, layerName );
+-    }
+-    else
+-    {
+-      orderedLayerList.insert( orderedLayerList.size(), layerName );
+-    }
++    QDomElement layerDrawingOrderElem = doc.createElement( "LayerDrawingOrder" );
++    QDomText drawingOrderText = doc.createTextNode( reversedList.join( "," ) );
++    layerDrawingOrderElem.appendChild( drawingOrderText );
++    parentElem.appendChild( layerDrawingOrderElem );
+   }
+ }
+ 
+-
+ void QgsWMSProjectParser::addLayerStyles( QgsMapLayer* currentLayer, QDomDocument& doc, QDomElement& layerElem, const QString& version ) const
+ {
+   foreach ( QString styleName, currentLayer->styleManager()->styles() )
+@@ -996,7 +868,9 @@ void QgsWMSProjectParser::addLayers( QDo
+                                      const QMap<QString, QgsMapLayer *> &layerMap,
+                                      const QStringList &nonIdentifiableLayers,
+                                      QString version, //1.1.1 or 1.3.0
+-                                     bool fullProjectSettings ) const
++                                     bool fullProjectSettings,
++                                     QHash<QString, QString> &idNameMap,
++                                     QStringList &layerIDList ) const
+ {
+   QDomNodeList legendChildren = legendElem.childNodes();
+   for ( int i = 0; i < legendChildren.size(); ++i )
+@@ -1005,10 +879,9 @@ void QgsWMSProjectParser::addLayers( QDo
+     QDomElement layerElem = doc.createElement( "Layer" );
+     if ( fullProjectSettings )
+     {
+-      layerElem.setAttribute( "visible", !( currentChildElem.attribute( "checked" ) == "Qt::Unchecked" ) );
++      layerElem.setAttribute( "visible", currentChildElem.attribute( "checked" ) != "Qt::Unchecked" );
+     }
+ 
+-
+     if ( currentChildElem.tagName() == "legendgroup" )
+     {
+       layerElem.setAttribute( "queryable", "1" );
+@@ -1058,12 +931,12 @@ void QgsWMSProjectParser::addLayers( QDo
+             pLayerMap.insert( pp->layerId( elem ), pp->createLayerFromElement( elem ) );
+           }
+ 
+-          p->addLayers( doc, layerElem, embeddedGroupElem, pLayerMap, pIdDisabled, version, fullProjectSettings );
++          p->addLayers( doc, layerElem, embeddedGroupElem, pLayerMap, pIdDisabled, version, fullProjectSettings, idNameMap, layerIDList );
+         }
+       }
+       else //normal (not embedded) legend group
+       {
+-        addLayers( doc, layerElem, currentChildElem, layerMap, nonIdentifiableLayers, version, fullProjectSettings );
++        addLayers( doc, layerElem, currentChildElem, layerMap, nonIdentifiableLayers, version, fullProjectSettings, idNameMap, layerIDList );
+       }
+ 
+       // combine bounding boxes of children (groups/layers)
+@@ -1075,7 +948,7 @@ void QgsWMSProjectParser::addLayers( QDo
+ 
+       if ( !layerMap.contains( id ) )
+       {
+-        QgsDebugMsg( QString( "layer %1 not found in map - layer cache to small?" ).arg( id ) );
++        QgsDebugMsg( QString( "layer %1 not found in map - layer cache too small?" ).arg( id ) );
+         continue;
+       }
+ 
+@@ -1107,6 +980,9 @@ void QgsWMSProjectParser::addLayers( QDo
+       nameElem.appendChild( nameText );
+       layerElem.appendChild( nameElem );
+ 
++      layerIDList << id;
++      idNameMap.insert( id, currentLayer->name() );
++
+       QDomElement titleElem = doc.createElement( "Title" );
+       QString titleName = currentLayer->title();
+       if ( titleName.isEmpty() )
+@@ -1321,7 +1197,6 @@ void QgsWMSProjectParser::addOWSLayerSty
+ }
+ 
+ 
+-
+ void QgsWMSProjectParser::addOWSLayers( QDomDocument &doc,
+                                         QDomElement &parentElem,
+                                         const QDomElement &legendElem,
+--- a/src/server/qgswmsprojectparser.h
++++ b/src/server/qgswmsprojectparser.h
+@@ -127,13 +127,7 @@ class QgsWMSProjectParser : public QgsWM
+     virtual QStringList identifyDisabledLayers() const override;
+ 
+     /**Reads layer drawing order from the legend section of the project file and appends it to the parent elemen (usually the <Capability> element)*/
+-    void addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const;
+-
+-    /**Adds drawing order info from layer element or group element (recursive)*/
+-    void addDrawingOrder( QDomElement groupElem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList ) const;
+-
+-    /**Adds drawing order info from embedded layer element or embedded group element (recursive)*/
+-    void addDrawingOrderEmbeddedGroup( QDomElement groupElem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList ) const;
++    void addDrawingOrder( QDomElement& parentElem, QDomDocument& doc, const QHash<QString, QString> &idNameMap, const QStringList &layerIDList ) const;
+ 
+     void addLayerStyles( QgsMapLayer* currentLayer, QDomDocument& doc, QDomElement& layerElem, const QString& version ) const;
+ 
+@@ -143,7 +137,9 @@ class QgsWMSProjectParser : public QgsWM
+                     const QMap<QString, QgsMapLayer *> &layerMap,
+                     const QStringList &nonIdentifiableLayers,
+                     QString version, //1.1.1 or 1.3.0
+-                    bool fullProjectSettings = false ) const;
++                    bool fullProjectSettings,
++                    QHash<QString, QString> &idNameMap,
++                    QStringList &layerIDList ) const;
+ 
+     void addOWSLayerStyles( QgsMapLayer* currentLayer, QDomDocument& doc, QDomElement& layerElem ) const;
+ 
diff --git a/debian/patches/0001-server-fix-parsing-of-bbox-numbers-in-scientific-not.patch b/debian/patches/0001-server-fix-parsing-of-bbox-numbers-in-scientific-not.patch
new file mode 100644
index 0000000..23d3afa
--- /dev/null
+++ b/debian/patches/0001-server-fix-parsing-of-bbox-numbers-in-scientific-not.patch
@@ -0,0 +1,139 @@
+From e983efb0e939c502def49951d2bd8594feaacc21 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 20 Mar 2015 16:10:00 +0100
+Subject: =?UTF-8?q?server:=20fix=20parsing=20of=20bbox=20numbers=20in=20scie?=
+ =?UTF-8?q?ntific=20notation=20containing=20+=0A(reverts=20905561f,=20cherry?=
+ =?UTF-8?q?=20picked=20and=20merged=206309dbd,=2057046c5,=208c8a9e0)?=
+Origin: https://github.com/qgis/QGIS/commit/e983efb0e939c502def49951d2bd8594feaacc21
+
+---
+ src/server/qgshttprequesthandler.cpp |    7 ++--
+ src/server/qgswmsserver.cpp          |   67 +++++++++++-----------------------
+ 2 files changed, 25 insertions(+), 49 deletions(-)
+
+--- a/src/server/qgshttprequesthandler.cpp
++++ b/src/server/qgshttprequesthandler.cpp
+@@ -505,7 +505,7 @@ void QgsHttpRequestHandler::requestStrin
+   parameters.clear();
+ 
+ 
+-  //insert key and value into the map (parameters are separated by &
++  //insert key and value into the map (parameters are separated by &)
+   foreach ( QString element, request.split( "&" ) )
+   {
+     int sepidx = element.indexOf( "=", 0, Qt::CaseSensitive );
+@@ -515,10 +515,11 @@ void QgsHttpRequestHandler::requestStrin
+     }
+ 
+     QString key = element.left( sepidx );
++    key = QUrl::fromPercentEncoding( key.toLocal8Bit() ); //replace encoded special characters and utf-8 encodings
++
+     QString value = element.mid( sepidx + 1 );
+     value.replace( "+", " " );
+-    value = QUrl::fromPercentEncoding( value.toLocal8Bit() ); //replace encoded special caracters and utf-8 encodings
+-    key = QUrl::fromPercentEncoding( key.toLocal8Bit() ); //replace encoded special caracters and utf-8 encodings
++    value = QUrl::fromPercentEncoding( value.toLocal8Bit() ); //replace encoded special characters and utf-8 encodings
+ 
+     if ( key.compare( "SLD_BODY", Qt::CaseInsensitive ) == 0 )
+     {
+--- a/src/server/qgswmsserver.cpp
++++ b/src/server/qgswmsserver.cpp
+@@ -595,29 +595,26 @@ static QgsLayerTreeModelLegendNode* _fin
+ }
+ 
+ 
+-static QgsRectangle _parseBBOX( const QString& bboxStr, bool* ok )
++static QgsRectangle _parseBBOX( const QString &bboxStr, bool &ok )
+ {
+-  *ok = false;
+-  QgsRectangle bbox;
++  ok = false;
+ 
+   QStringList lst = bboxStr.split( "," );
+   if ( lst.count() != 4 )
+-    return bbox;
++    return QgsRectangle();
+ 
+-  bool convOk;
+-  bbox.setXMinimum( lst[0].toDouble( &convOk ) );
+-  if ( !convOk ) return bbox;
+-  bbox.setYMinimum( lst[1].toDouble( &convOk ) );
+-  if ( !convOk ) return bbox;
+-  bbox.setXMaximum( lst[2].toDouble( &convOk ) );
+-  if ( !convOk ) return bbox;
+-  bbox.setYMaximum( lst[3].toDouble( &convOk ) );
+-  if ( !convOk ) return bbox;
+-
+-  if ( bbox.isEmpty() ) return bbox;
++  double d[4];
++  for ( int i = 0; i < 4; i++ )
++  {
++    bool ok;
++    lst[i].replace( " ", "+" );
++    d[i] = lst[i].toDouble( &ok );
++    if ( !ok )
++      return QgsRectangle();
++  }
+ 
+-  *ok = true;
+-  return bbox;
++  ok = true;
++  return QgsRectangle( d[0], d[1], d[2], d[3] );
+ }
+ 
+ 
+@@ -644,8 +641,8 @@ QImage* QgsWMSServer::getLegendGraphics(
+     contentBasedLegend = true;
+ 
+     bool bboxOk;
+-    contentBasedLegendExtent = _parseBBOX( mParameters["BBOX"], &bboxOk );
+-    if ( !bboxOk )
++    contentBasedLegendExtent = _parseBBOX( mParameters["BBOX"], bboxOk );
++    if ( !bboxOk || contentBasedLegendExtent.isEmpty() )
+       throw QgsMapServiceException( "InvalidParameterValue", "Invalid BBOX parameter" );
+ 
+     if ( mParameters.contains( "RULE" ) )
+@@ -1767,24 +1764,8 @@ int QgsWMSServer::configureMapRender( co
+   mMapRenderer->setOutputSize( QSize( paintDevice->width(), paintDevice->height() ), paintDevice->logicalDpiX() );
+ 
+   //map extent
+-  bool conversionSuccess;
+-  double minx, miny, maxx, maxy;
+-  QString bbString = mParameters.value( "BBOX", "0,0,0,0" );
+-
+-  bool bboxOk = true;
+-  minx = bbString.section( ",", 0, 0 ).toDouble( &conversionSuccess );
+-  if ( !conversionSuccess )
+-    bboxOk = false;
+-  miny = bbString.section( ",", 1, 1 ).toDouble( &conversionSuccess );
+-  if ( !conversionSuccess )
+-    bboxOk = false;
+-  maxx = bbString.section( ",", 2, 2 ).toDouble( &conversionSuccess );
+-  if ( !conversionSuccess )
+-    bboxOk = false;
+-  maxy = bbString.section( ",", 3, 3 ).toDouble( &conversionSuccess );
+-  if ( !conversionSuccess )
+-    bboxOk = false;
+-
++  bool bboxOk;
++  QgsRectangle mapExtent = _parseBBOX( mParameters.value( "BBOX", "0,0,0,0" ), bboxOk );
+   if ( !bboxOk )
+   {
+     //throw a service exception
+@@ -1840,15 +1821,9 @@ int QgsWMSServer::configureMapRender( co
+   QString version = mParameters.value( "VERSION", "1.3.0" );
+   if ( version != "1.1.1" && outputCRS.axisInverted() )
+   {
+-    //switch coordinates of extent
+-    double tmp;
+-    tmp = minx;
+-    minx = miny; miny = tmp;
+-    tmp = maxx;
+-    maxx = maxy; maxy = tmp;
++    mapExtent.invert();
+   }
+ 
+-  QgsRectangle mapExtent( minx, miny, maxx, maxy );
+   mMapRenderer->setExtent( mapExtent );
+ 
+   if ( mConfigParser )
diff --git a/debian/patches/0001-update_ts.sh-include-locations.patch b/debian/patches/0001-update_ts.sh-include-locations.patch
new file mode 100644
index 0000000..322a2b9
--- /dev/null
+++ b/debian/patches/0001-update_ts.sh-include-locations.patch
@@ -0,0 +1,22 @@
+From 3d3ccd08463c1812245240439081e7fb823303ea Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Mon, 23 Mar 2015 15:08:38 +0100
+Subject: update_ts.sh: include locations
+Origin: https://github.com/qgis/QGIS/commit/3d3ccd08463c1812245240439081e7fb823303ea
+
+(cherry picked from commit 45fbb3f5a954d52779ba742087811ff4d9a91582)
+---
+ scripts/update_ts.sh |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/scripts/update_ts.sh
++++ b/scripts/update_ts.sh
+@@ -107,7 +107,7 @@ echo Creating qmake project file
+ $QMAKE -project -o qgis_ts.pro -nopwd src python i18n
+ 
+ echo Updating translations
+-$LUPDATE -locations none -verbose qgis_ts.pro
++$LUPDATE -locations absolute -verbose qgis_ts.pro
+ 
+ if [ $1 = push ]; then
+ 	echo Pushing translation...
diff --git a/debian/patches/0001-vector-layer-connect-missing-edit-buffer-signals.patch b/debian/patches/0001-vector-layer-connect-missing-edit-buffer-signals.patch
new file mode 100644
index 0000000..f75fcef
--- /dev/null
+++ b/debian/patches/0001-vector-layer-connect-missing-edit-buffer-signals.patch
@@ -0,0 +1,46 @@
+From aa97751660c6d49b97ddb9e98faa8359b0a6cccb Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Thu, 19 Mar 2015 02:51:34 +0100
+Subject: vector layer: connect missing edit buffer signals
+Origin: https://github.com/qgis/QGIS/commit/aa97751660c6d49b97ddb9e98faa8359b0a6cccb
+
+(cherry picked from commit 65378e6a108656fb33e919de59feabb10b8b6e19)
+---
+ src/core/qgsvectorlayer.cpp |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/src/core/qgsvectorlayer.cpp
++++ b/src/core/qgsvectorlayer.cpp
+@@ -179,9 +179,7 @@ QgsVectorLayer::QgsVectorLayer( QString
+   }
+ 
+   connect( this, SIGNAL( selectionChanged( QgsFeatureIds, QgsFeatureIds, bool ) ), this, SIGNAL( selectionChanged() ) );
+-
+   connect( this, SIGNAL( selectionChanged( QgsFeatureIds, QgsFeatureIds, bool ) ), this, SIGNAL( repaintRequested() ) );
+-
+   connect( QgsProject::instance()->relationManager(), SIGNAL( relationsLoaded() ), this, SLOT( onRelationsLoaded() ) );
+ 
+   // Default simplify drawing settings
+@@ -1250,9 +1248,22 @@ bool QgsVectorLayer::startEditing()
+   connect( mEditBuffer, SIGNAL( attributeValueChanged( QgsFeatureId, int, QVariant ) ), this, SIGNAL( attributeValueChanged( QgsFeatureId, int, QVariant ) ) );
+   connect( mEditBuffer, SIGNAL( attributeAdded( int ) ), this, SIGNAL( attributeAdded( int ) ) );
+   connect( mEditBuffer, SIGNAL( attributeDeleted( int ) ), this, SIGNAL( attributeDeleted( int ) ) );
++
++  connect( mEditBuffer, SIGNAL( committedAttributesDeleted( const QString &, const QgsAttributeList & ) ),
++           this, SIGNAL( committedAttributesDeleted( const QString &, const QgsAttributeList & ) ) );
++
++  connect( mEditBuffer, SIGNAL( committedAttributesAdded( const QString &, const QList<QgsField> & ) ),
++           this, SIGNAL( committedAttributesAdded( const QString &, const QList<QgsField> & ) ) );
++
+   connect( mEditBuffer, SIGNAL( committedFeaturesAdded( QString, QgsFeatureList ) ), this, SIGNAL( committedFeaturesAdded( QString, QgsFeatureList ) ) );
+   connect( mEditBuffer, SIGNAL( committedFeaturesRemoved( QString, QgsFeatureIds ) ), this, SIGNAL( committedFeaturesRemoved( QString, QgsFeatureIds ) ) );
+ 
++  connect( mEditBuffer, SIGNAL( committedAttributeValuesChanges( const QString &, const QgsChangedAttributesMap & ) ),
++           this, SIGNAL( committedAttributeValuesChanges( const QString &, const QgsChangedAttributesMap & ) ) );
++
++  connect( mEditBuffer, SIGNAL( committedGeometriesChanges( const QString &, const QgsGeometryMap & ) ),
++           this, SIGNAL( committedGeometriesChanges( const QString &, const QgsGeometryMap & ) ) );
++
+   updateFields();
+ 
+   emit editingStarted();
diff --git a/debian/patches/series b/debian/patches/series
index c8b7e39..b1d1a32 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -32,3 +32,90 @@ exclude-elvensword-resources.patch
 0001-Fix-incorrect-data-type-for-GDAL-layers-with-gain-of.patch
 0001-Followup-914ecc-also-fix-calculation-of-srcDataType.patch
 0001-Add-some-GDAL-provider-unit-tests.patch
+0001-adding-french-translators.patch
+0001-Remember-last-used-directory-for-raster-save-as-dial.patch
+0001-Fix-power-validity-test-in-raster-calculator-fix-112.patch
+0001-Fix-heatmap-renderer-not-working-for-reprojected-lay.patch
+0001-Fix-grid-annotation-distance-not-restored-in-dialog-.patch
+0001-qoci-spatial-driver-cleanup-session-connection-when-.patch
+0001-Custom-widgets-make-sure-config-can-loaded-from-the-.patch
+0001-Close-attribute-dialog-when-layer-is-removed.patch
+0001-Fix-shortcut-keys-in-attribute-table-dialog-fix-1227.patch
+0001-Update-Mac-bundling-for-qgis_server-lib.patch
+0001-Set-GDAL-env-vars-for-when-gdal-lib-is-bundled-in-ap.patch
+0001-Redo-server-stop-processing-after-no-REQUEST-excepti.patch
+0001-Backport-of-dangling-pointer-bug.patch
+0001-Backport-of-missing-type-definitions-in-delimited-te.patch
+0001-dxf-export.patch
+0001-dxf-export-fix-data-defined-outline-color-of-simple-.patch
+0001-vector-layer-connect-missing-edit-buffer-signals.patch
+0001-include-qgslayerdefinition.sip-in-bindings.patch
+0001-update_ts.sh-include-locations.patch
+0001-expressions-fix-modulo-0-crashes-fixes-12431.patch
+0001-server-fix-parsing-of-bbox-numbers-in-scientific-not.patch
+0001-server-deduce-service-wms-from-request-if-not-explic.patch
+0001-Standardise-use-of-red-minus-icon-fix-12425.patch
+0001-Don-t-keep-dangling-pointers-in-QgisApp-mPrintCompos.patch
+0001-Fix-buffer-size-was-incorrectly-stored-in-x-position.patch
+0001-Backport-of-pull-request-1932.patch
+0001-BUGFIX-In-WFS-GetFeature-joined-fields-not-are-not-r.patch
+0001-GRASS-7.0.0-API-change.patch
+0001-GRASS-fix-crash-in-browser-when-opening-GRASS-6-maps.patch
+0001-GRASS-mutex-function-called-by-browser-item-fixes-cr.patch
+0001-Fix-QgsRubberBand-refresh.patch
+0001-BUGFIX-Update-DatumTransformInfo-on-layerCrsChanged.patch
+0001-db-manager-fix-setting-of-contrast-enhancement-for-s.patch
+0001-postgres-provider-also-apply-filterWhereClause-to-fe.patch
+0001-dxf-export-2.patch
+0001-map-canvas-update-sip-bindings-followup-bef4059f.patch
+0001-Fix-QgsRubberBand-visibility-behavior-followup-37171.patch
+0001-postgres-data-items-don-t-set-srid-for-geometryless-.patch
+0001-Partially-reverted-5e1b5a43-because-it-breaks-GRASS-.patch
+0001-Fix-QgsWmsDpiMode-enum-declaration.patch
+0001-Avoid-creating-3-identical-label-candidates-in-offse.patch
+0001-Fix-setting-min-in-raster-histogram-using-mouse-also.patch
+0001-Fix-scale-dependant-rendering-of-diagrams-fix-10700.patch
+0001-Fix-incorrect-calculation-of-priority-for-diagrams-f.patch
+0001-Update-CatchmentArea-Recursive-.txt.patch
+0001-Update-CatchmentArea-FlowTracing-.txt.patch
+0001-Update-CatchmentArea-Parallel-.txt.patch
+0001-Update-MultilevelB-SplineInterpolation.txt.patch
+0001-Update-MultilevelB-SplineInterpolation-fromGrid-.txt.patch
+0001-fix-SAGA-contour-lines-from-grid.patch
+0001-fix-saga-shapes-to-grid.patch
+0001-fix-saga-catchment-area-modules.patch
+0001-fix-saga-interpolations-modules.patch
+0001-fix-typo.patch
+0001-Processing-Avoid-consecutive-quotes-when-calling-OTB.patch
+0001-fix-gdal-rasterize-when-using-an-existing-raster-lay.patch
+0001-better-option-text.patch
+0001-remove-duplicate-condition.patch
+0001-Update-ShapestoGrid.txt.patch
+0001-Better-default-for-a-Processing-SAGA-module.patch
+0001-Various-fixes-to-Processing-algs-fix-for-http-hub.qg.patch
+0001-Better-naming-for-GDAL-outputs-partial-fix-for-http-.patch
+0001-Better-output-names-for-SAGA-models.patch
+0001-processing-fix-typo-in-the-algorithm-name-fix-12227.patch
+0001-processing-save-last-used-models-scripts-directory-f.patch
+0001-processing-display-X-and-Y-labels-on-the-scatterplot.patch
+0001-processing-set-CRS-for-output-grid-fix-12518.patch
+0001-fix-gdal_rasterize-remove-duplicate-options.patch
+0001-fix-GRASS7-v.generalize.patch
+0001-Update-Slope-Aspect-Curvature.txt.patch
+0001-Better-default-for-COMPRESSTYPE-in-GDAL.patch
+0001-Update-ShapestoGrid.txt-2.patch
+0001-german-translation-update-2.patch
+0001-QgsMimeDataUtils-encode-fix-escape-also-backslash.patch
+0001-Make-QgsPointLocator-discard-geometries-that-cannot-.patch
+0001-include-pointer-to-message-in-connection-error-messa.patch
+0001-oracle-spatial-use-sdo_relate-for-exact-intersect-fe.patch
+0001-server-fix-LayerDrawingOrder-fixes-12484.patch
+0001-doxygen-add-effects-directory.patch
+0001-Fix-primary-key-search.patch
+0001-remove-unused-button-in-categorized-renderer-ui.patch
+0001-processing-fix-interpretation-of-oracle-layers-fixes.patch
+0001-Fix-quoting-of-xfb-run-invocation.patch
+0001-Properly-handle-non-matching-number-of-WMS-styles-an.patch
+0001-german-translation-update-3.patch
+0001-fix-where-clause-when-multiple-features-are-filtered.patch
+0001-osgeo4w-reflect-packagename-and-version-in-nightly-b.patch
diff --git a/debian/qgis-common.links b/debian/qgis-common.links
index f71014f..2e6eb47 100644
--- a/debian/qgis-common.links
+++ b/debian/qgis-common.links
@@ -1,2 +1,3 @@
+usr/share/common-licenses/GPL-2       usr/share/qgis/doc/LICENSE
 usr/share/javascript/jquery/jquery.js usr/share/qgis/doc/jquery.js
 usr/share/javascript/leaflet          usr/share/qgis/doc/leaflet

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qgis.git



More information about the Pkg-grass-devel mailing list