diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pageitem.cpp scribus-trunk/scribus/pageitem.cpp
--- scribus-trunk-orig/scribus/pageitem.cpp	2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/pageitem.cpp	2009-12-20 14:31:07.000000000 +0100
@@ -123,6 +123,10 @@
 	UseEmbedded(other.UseEmbedded),
 	EmProfile(other.EmProfile),
 	IRender(other.IRender),
+	OverrideCompressionMethod(other.OverrideCompressionMethod),
+	CompressionMethodIndex(other.CompressionMethodIndex),
+	OverrideCompressionQuality(other.OverrideCompressionQuality),
+	CompressionQualityIndex(other.CompressionQualityIndex),
 
 	PictureIsAvailable(other.PictureIsAvailable),
 	OrigW(other.OrigW),
@@ -322,6 +326,10 @@
 	// Initialize superclass(es)
 	: QObject(pa), SingleObservable<PageItem>(pa->itemsChanged()),
 	// Initialize member variables
+	OverrideCompressionMethod(false),
+	CompressionMethodIndex(0),
+	OverrideCompressionQuality(false),
+	CompressionQualityIndex(0),
 	itemText(pa),
 	undoManager(UndoManager::instance()),
 	lineShadeVal(100),
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pageitem.h scribus-trunk/scribus/pageitem.h
--- scribus-trunk-orig/scribus/pageitem.h	2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/pageitem.h	2009-12-20 14:31:07.000000000 +0100
@@ -442,6 +442,11 @@
 	QString cmsProfile() const { return IProfile; }
 	void setCmsProfile(QString val) { IProfile = val; }
 	
+	bool OverrideCompressionMethod;
+	int CompressionMethodIndex;
+	bool OverrideCompressionQuality;
+	int CompressionQualityIndex;
+
 	/*! Flag to hiold image file availability */
 	bool PictureIsAvailable;
 	int OrigW;
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pdflib_core.cpp scribus-trunk/scribus/pdflib_core.cpp
--- scribus-trunk-orig/scribus/pdflib_core.cpp	2009-12-20 14:27:36.000000000 +0100
+++ scribus-trunk/scribus/pdflib_core.cpp	2009-12-20 14:31:07.000000000 +0100
@@ -501,7 +501,7 @@
 	return (succeed ? bytesWritten : 0);
 }
 
-int PDFLibCore::WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, bool cmyk,
+int PDFLibCore::WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, int quality, bool cmyk,
 										bool gray, bool sameFile, bool precal)
 {
 	bool succeed = true;
@@ -516,7 +516,7 @@
 		tmpFile  = QDir::convertSeparators(ScPaths::getTempFileDir() + "sc.jpg");
 		if ((gray) && (!precal))
 			image.convertToGray();
-		if (image.Convert2JPG(tmpFile, Options.Quality, cmyk, gray))
+		if (image.Convert2JPG(tmpFile, quality, cmyk, gray))
 			jpgFileName = tmpFile;
 	}
 	if (jpgFileName.isEmpty())
@@ -8918,6 +8918,7 @@
 						PutDoc("/ColorSpace /DeviceCMYK\n");
 				}
 			}
+			enum PDFOptions::PDFCompression compress_method = Options.CompressMethod;
 			enum PDFOptions::PDFCompression cm = Options.CompressMethod;
 			bool exportToCMYK = false, exportToGrayscale = false, jpegUseOriginal = false;
 			if (!Options.UseRGB && !(doc.HasCMS && Options.UseProfiles2 && !realCMYK))
@@ -8928,6 +8929,8 @@
 				else
 					exportToCMYK      = !Options.UseRGB;
 			}
+			if (c->OverrideCompressionMethod)
+				compress_method = cm = (enum PDFOptions::PDFCompression) c->CompressionMethodIndex;
 			if (extensionIndicatesJPEG(ext) && (cm != PDFOptions::Compression_None))
 			{
 				if (((Options.UseRGB || Options.UseProfiles2) && (cm == PDFOptions::Compression_Auto) && (c->effectsInUse.count() == 0) && (img.imgInfo.colorspace == ColorSpaceRGB)) && (!img.imgInfo.progressive) && (!((Options.RecalcPic) && (Options.PicRes < (qMax(72.0 / c->imageXScale(), 72.0 / c->imageYScale()))))))
@@ -8946,7 +8949,7 @@
 				}*/
 				else
 				{
-					if (Options.CompressMethod == PDFOptions::Compression_JPEG)
+					if (compress_method == PDFOptions::Compression_JPEG)
 					{
 						if (realCMYK || !((Options.UseRGB) || (Options.UseProfiles2)))
 						{
@@ -8964,7 +8967,7 @@
 			}
 			else
 			{
-				if ((Options.CompressMethod == PDFOptions::Compression_JPEG) || (Options.CompressMethod == PDFOptions::Compression_Auto))
+				if ((compress_method == PDFOptions::Compression_JPEG) || (compress_method == PDFOptions::Compression_Auto))
 				{
 					if (realCMYK || !((Options.UseRGB) || (Options.UseProfiles2)))
 					{
@@ -8975,7 +8978,7 @@
 							exportToCMYK      = !Options.UseRGB;
 					}
 					cm = PDFOptions::Compression_JPEG;
-					/*if (Options.CompressMethod == PDFOptions::Compression_Auto)
+					/*if (compress_method == PDFOptions::Compression_Auto)
 					{
 						QFileInfo fi(tmpFile);
 						if (fi.size() < im.size())
@@ -9011,7 +9014,12 @@
 			if ((hasGrayProfile) && (doc.HasCMS) && (Options.UseProfiles2) && (!hasColorEffect))
 				exportToGrayscale = true;
 			if (cm == PDFOptions::Compression_JPEG)
-				bytesWritten = WriteJPEGImageToStream(img, fn, imageObj, exportToCMYK, exportToGrayscale, jpegUseOriginal, (!hasColorEffect && hasGrayProfile));
+			{
+				int quality = c->OverrideCompressionQuality ? c->CompressionQualityIndex : Options.Quality;
+				if (c->OverrideCompressionQuality)
+					jpegUseOriginal = false;
+				bytesWritten = WriteJPEGImageToStream(img, fn, imageObj, quality, exportToCMYK, exportToGrayscale, jpegUseOriginal, (!hasColorEffect && hasGrayProfile));
+			}
 			else if (cm == PDFOptions::Compression_ZIP)
 				bytesWritten = WriteFlateImageToStream(img, imageObj, exportToCMYK, exportToGrayscale, (!hasColorEffect && hasGrayProfile));
 			else
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pdflib_core.h scribus-trunk/scribus/pdflib_core.h
--- scribus-trunk-orig/scribus/pdflib_core.h	2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/pdflib_core.h	2009-12-20 14:31:07.000000000 +0100
@@ -105,7 +105,7 @@
 	bool       EncodeArrayToStream(const QByteArray& in, int ObjNum);
 
 	int     WriteImageToStream(ScImage& image, int ObjNum, bool cmyk, bool gray, bool precal);
-	int     WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, bool cmyk, bool gray, bool sameFile, bool precal);
+	int     WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, int quality, bool cmyk, bool gray, bool sameFile, bool precal);
 	int     WriteFlateImageToStream(ScImage& image, int ObjNum, bool cmyk, bool gray, bool precal);
 
 	void    CalcOwnerKey(const QString & Owner, const QString & User);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format.cpp scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
--- scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format.cpp	2009-12-20 14:27:36.000000000 +0100
+++ scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format.cpp	2009-12-20 14:31:07.000000000 +0100
@@ -2348,6 +2348,10 @@
 		currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
 		currItem->pixm.imgInfo.lowResType = attrs.valueAsInt("ImageRes", 1);
 		currItem->pixm.imgInfo.actualPageNumber = attrs.valueAsInt("Pagenumber", 0);
+		if ((currItem->OverrideCompressionMethod = attrs.hasAttribute("COMPRESSIONMETHOD")))
+			currItem->CompressionMethodIndex = attrs.valueAsInt("COMPRESSIONMETHOD");
+		if ((currItem->OverrideCompressionQuality = attrs.hasAttribute("COMPRESSIONQUALITY")))
+			currItem->CompressionQualityIndex = attrs.valueAsInt("COMPRESSIONQUALITY");
 		if (currItem->asLatexFrame())
 		{
 			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX") * scx, attrs.valueAsDouble("LOCALY") * scy);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
--- scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp	2009-12-20 02:34:29.000000000 +0100
+++ scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp	2009-12-20 14:31:07.000000000 +0100
@@ -1662,6 +1662,13 @@
 	docu.writeAttribute("EPROF", item->EmProfile);
 	docu.writeAttribute("IRENDER",item->IRender);
 	docu.writeAttribute("EMBEDDED", item->UseEmbedded ? 1 : 0);
+	if (item->asImageFrame())
+	{
+		if (item->OverrideCompressionMethod)
+			docu.writeAttribute("COMPRESSIONMETHOD", item->CompressionMethodIndex);
+		if (item->OverrideCompressionQuality)
+			docu.writeAttribute("COMPRESSIONQUALITY", item->CompressionQualityIndex);
+	}
 	docu.writeAttribute("LOCK", item->locked() ? 1 : 0);
 	docu.writeAttribute("LOCKR", item->sizeLocked() ? 1 : 0);
 	docu.writeAttribute("REVERS", item->reversed() ? 1 : 0);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/scribusdoc.cpp scribus-trunk/scribus/scribusdoc.cpp
--- scribus-trunk-orig/scribus/scribusdoc.cpp	2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/scribusdoc.cpp	2009-12-20 14:31:07.000000000 +0100
@@ -11449,6 +11449,48 @@
 	changed();
 }
 
+void ScribusDoc::itemSelection_SetCompressionMethod(int cmIndex, Selection * customSelection)
+{
+	Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection;
+	assert(itemSelection!=0);
+	uint selectedItemCount=itemSelection->count();
+	if (selectedItemCount == 0)
+		return;
+	//TODO Add Undo
+	for (uint i = 0; i < selectedItemCount; ++i)
+	{
+		PageItem *currItem = itemSelection->itemAt(i);
+		if (currItem && currItem->itemType() == PageItem::ImageFrame)
+		{
+			if ((currItem->OverrideCompressionMethod = cmIndex >= 0))
+			{
+				currItem->CompressionMethodIndex = cmIndex;
+			}
+		}
+	}
+}
+
+void ScribusDoc::itemSelection_SetCompressionQuality(int cqIndex, Selection * customSelection)
+{
+	Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection;
+	assert(itemSelection!=0);
+	uint selectedItemCount=itemSelection->count();
+	if (selectedItemCount == 0)
+		return;
+	//TODO Add Undo
+	for (uint i = 0; i < selectedItemCount; ++i)
+	{
+		PageItem *currItem = itemSelection->itemAt(i);
+		if (currItem && currItem->itemType() == PageItem::ImageFrame)
+		{
+			if ((currItem->OverrideCompressionQuality = cqIndex >= 0))
+			{
+				currItem->CompressionQualityIndex = cqIndex;
+			}
+		}
+	}
+}
+
 QMap<PageItem*, QString> ScribusDoc::getDocItemNames(PageItem::ItemType itemType)
 {
 	QMap<PageItem*, QString> namesMap;
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/scribusdoc.h scribus-trunk/scribus/scribusdoc.h
--- scribus-trunk-orig/scribus/scribusdoc.h	2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/scribusdoc.h	2009-12-20 14:31:07.000000000 +0100
@@ -843,6 +843,8 @@
 	void itemSelection_resetOpticalMargins(Selection* customSelection=0);
 	void itemSelection_SetColorProfile(const QString& profileName, Selection* customSelection=0);
 	void itemSelection_SetRenderIntent(int intentIndex, Selection* customSelection=0);
+	void itemSelection_SetCompressionMethod(int cmIndex, Selection* customSelection=0);
+	void itemSelection_SetCompressionQuality(int cqIndex, Selection* customSelection=0);
 	
 //	void chAbStyle(PageItem *currItem, int s);
 
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/ui/propertiespalette.cpp scribus-trunk/scribus/ui/propertiespalette.cpp
--- scribus-trunk-orig/scribus/ui/propertiespalette.cpp	2009-12-20 02:34:24.000000000 +0100
+++ scribus-trunk/scribus/ui/propertiespalette.cpp	2009-12-20 14:31:07.000000000 +0100
@@ -1381,6 +1381,23 @@
 	GroupBoxCMLayout->addWidget(MonitorI);
 	pageLayout_4->addWidget(GroupBoxCM);
 
+	GroupBoxCompression = new QFrame( page_4 );
+	GroupBoxCompression->setFrameShape( QFrame::NoFrame );
+	GroupBoxCompression->setFrameShadow( QFrame::Plain );
+	GroupBoxCompressionLayout = new QVBoxLayout( GroupBoxCompression );
+	GroupBoxCompressionLayout->setSpacing( 2 );
+	GroupBoxCompressionLayout->setMargin( 5 );
+	GroupBoxCompressionLayout->setAlignment( Qt::AlignTop );
+	TextCompressionMethod = new QLabel( GroupBoxCompression );
+	GroupBoxCompressionLayout->addWidget( TextCompressionMethod );
+	CompressionMethod = new ScComboBox( GroupBoxCompression );
+	GroupBoxCompressionLayout->addWidget(CompressionMethod);
+	TextCompressionQuality = new QLabel( GroupBoxCompression );
+	GroupBoxCompressionLayout->addWidget( TextCompressionQuality );
+	CompressionQuality = new ScComboBox( GroupBoxCompression );
+	GroupBoxCompressionLayout->addWidget( CompressionQuality );
+	pageLayout_4->addWidget( GroupBoxCompression );
+
 	QSpacerItem* spacer9 = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding );
 	pageLayout_4->addItem( spacer9 );
 	idImageItem=TabStack->addItem( page_4, "&Image" );
@@ -1578,6 +1595,8 @@
 	connect(LineW, SIGNAL(valueChanged(double)), this, SLOT(handlePathOffs()));
 	connect(InputP, SIGNAL(activated(const QString&)), this, SLOT(ChangeProfile(const QString&)));
 	connect(MonitorI, SIGNAL(activated(int)), this, SLOT(ChangeIntent()));
+	connect(CompressionMethod, SIGNAL(activated(int)), this, SLOT(ChangeCompressionMethod()));
+	connect(CompressionQuality, SIGNAL(activated(int)), this, SLOT(ChangeCompressionQuality()));
 	connect(NameEdit, SIGNAL(Leaved()), this, SLOT(NewName()));
 //	connect(langCombo, SIGNAL(activated(int)), this, SLOT(NewLanguage()));
 	connect( TabsButton, SIGNAL( clicked() ), this, SLOT( ManageTabs() ) );
@@ -2165,6 +2184,8 @@
 		imagePageNumber->setMaximum(CurItem->pixm.imgInfo.numberOfPages);
 		imagePageNumber->setValue(CurItem->pixm.imgInfo.actualPageNumber);
 		connect(imagePageNumber, SIGNAL(valueChanged(int)), this, SLOT(NewPage()));
+		CompressionMethod->setCurrentIndex(CurItem->OverrideCompressionMethod ? CurItem->CompressionMethodIndex + 1 : 0);
+		CompressionQuality->setCurrentIndex(CurItem->OverrideCompressionQuality ? CurItem->CompressionQualityIndex + 1 : 0);
 	}
 	Revert->setChecked(CurItem->reversed());
 	setTextFlowMode(CurItem->textFlowMode());
@@ -4951,6 +4972,20 @@
 	doc->itemSelection_SetRenderIntent(MonitorI->currentIndex());
 }
 
+void PropertiesPalette::ChangeCompressionMethod()
+{
+	if (!HaveDoc || !HaveItem || !m_ScMW || m_ScMW->ScriptRunning)
+		return;
+	doc->itemSelection_SetCompressionMethod(CompressionMethod->currentIndex() - 1);
+}
+
+void PropertiesPalette::ChangeCompressionQuality()
+{
+	if (!HaveDoc || !HaveItem || !m_ScMW || m_ScMW->ScriptRunning)
+		return;
+	doc->itemSelection_SetCompressionQuality(CompressionQuality->currentIndex() - 1);
+}
+
 void PropertiesPalette::ShowCMS()
 {
 	if (!m_ScMW || m_ScMW->ScriptRunning)
@@ -5429,6 +5464,8 @@
 	EditPSDProps->setText( tr("Extended Image Properties"));
 	TextCms1->setText( tr("Input Profile:"));
 	TextCms2->setText( tr("Rendering Intent:"));
+	TextCompressionMethod->setText( tr("PDF Compression Method:"));
+	TextCompressionQuality->setText( tr("PDF Compression Quality:"));
 // 	QList<QAction*> actList = lineSpacingPop->actions();
 // 	actList[0]->setText( tr("Fixed Linespacing"));
 // 	actList[1]->setText( tr("Automatic Linespacing"));
@@ -5446,6 +5483,23 @@
 	MonitorI->addItem( tr("Saturation"));
 	MonitorI->addItem( tr("Absolute Colorimetric"));
 	MonitorI->setCurrentIndex(oldMonitorI);
+	int oldCompressionMethod=CompressionMethod->currentIndex();
+	CompressionMethod->clear();
+	CompressionMethod->addItem( tr( "Global" ) );
+	CompressionMethod->addItem( tr( "Automatic" ) );
+	CompressionMethod->addItem( tr( "Lossy - JPEG" ) );
+	CompressionMethod->addItem( tr( "Lossless - Zip" ) );
+	CompressionMethod->addItem( tr( "None" ) );
+	CompressionMethod->setCurrentIndex(oldCompressionMethod);
+	int oldCompressionQuality=CompressionQuality->currentIndex();
+	CompressionQuality->clear();
+	CompressionQuality->addItem( tr( "Global" ) );
+	CompressionQuality->addItem( tr( "Maximum" ) );
+	CompressionQuality->addItem( tr( "High" ) );
+	CompressionQuality->addItem( tr( "Medium" ) );
+	CompressionQuality->addItem( tr( "Low" ) );
+	CompressionQuality->addItem( tr( "Minimum" ) );
+	CompressionQuality->setCurrentIndex(oldCompressionQuality);
 	int oldLineStyle = LStyle->currentIndex();
 	LStyle->clear();
 	LStyle->updateList();
@@ -5732,6 +5786,8 @@
 	Aspect->setToolTip( tr("Use image proportions rather than those of the frame"));
 	InputP->setToolTip( tr("Source profile of the image"));
 	MonitorI->setToolTip( tr("Rendering intent for the image"));
+	CompressionMethod->setToolTip( tr("Compression method used in PDF export for the image"));
+	CompressionQuality->setToolTip( tr("Compression quality used in PDF export for the image"));
 }
 
 
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/ui/propertiespalette.h scribus-trunk/scribus/ui/propertiespalette.h
--- scribus-trunk-orig/scribus/ui/propertiespalette.h	2009-12-20 02:34:24.000000000 +0100
+++ scribus-trunk/scribus/ui/propertiespalette.h	2009-12-20 14:31:07.000000000 +0100
@@ -315,6 +315,8 @@
 	void handleOverprint(int);
 	void ChangeProfile(const QString& prn);
 	void ChangeIntent();
+	void ChangeCompressionMethod();
+	void ChangeCompressionQuality();
 	void NewName();
 	void NewLanguage();
 	void HandleTLines();
@@ -384,6 +386,7 @@
 	QVBoxLayout* DistanceLayout3;
 	QGridLayout* GroupBox3aLayout;
 	QVBoxLayout* GroupBoxCMLayout;
+	QVBoxLayout* GroupBoxCompressionLayout;
 	QVBoxLayout* textFlowOptionsLayout;
 	QVBoxLayout* textFlowOptionsLayout2;
 	QHBoxLayout* layout23;
@@ -450,6 +453,8 @@
 	QLabel* LineModeT;
 	QLabel* TextCms1;
 	QLabel* TextCms2;
+	QLabel* TextCompressionMethod;
+	QLabel* TextCompressionQuality;
 	QLabel* edgesLabel;
 	QLabel* ChBaseTxt;
 	QLabel* ScaleTxt;
@@ -511,6 +516,7 @@
 	QGroupBox* GeoGroup;
 	QGroupBox* LayerGroup;
 	QFrame* GroupBoxCM;
+	QFrame* GroupBoxCompression;
 	QGroupBox* TLines;
 	QGroupBox* GroupBox3a;
 	QGroupBox* TransGroup;
@@ -537,6 +543,8 @@
 	QComboBox* langCombo;
 	QComboBox* InputP;
 	QComboBox* MonitorI;
+	QComboBox* CompressionMethod;
+	QComboBox* CompressionQuality;
 	QComboBox* LineMode;
 	QComboBox* lineSpacingModeCombo;
 	ColorCombo* TxStroke;
