diff --git a/api/publish.go b/api/publish.go
index f1ed28bb33029b693dd108c9b281cb44389539eb..d2287dbd84c412e4bd6a5244cae8cc499672c28b 100644
--- a/api/publish.go
+++ b/api/publish.go
@@ -96,6 +96,7 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
 		ButAutomaticUpgrades string
 		ForceOverwrite       bool
 		SkipContents         *bool
+		SkipBz2              *bool
 		Architectures        []string
 		Signing              SigningOptions
 		AcquireByHash        *bool
@@ -209,6 +210,11 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
 			published.SkipContents = *b.SkipContents
 		}
 
+		published.SkipBz2 = context.Config().SkipBz2Publishing
+		if b.SkipContents != nil {
+			published.SkipBz2 = *b.SkipBz2
+		}
+
 		if b.AcquireByHash != nil {
 			published.AcquireByHash = *b.AcquireByHash
 		}
@@ -243,6 +249,7 @@ func apiPublishUpdateSwitch(c *gin.Context) {
 		ForceOverwrite bool
 		Signing        SigningOptions
 		SkipContents   *bool
+		SkipBz2        *bool
 		SkipCleanup    *bool
 		Snapshots      []struct {
 			Component string `binding:"required"`
@@ -322,6 +329,10 @@ func apiPublishUpdateSwitch(c *gin.Context) {
 		published.SkipContents = *b.SkipContents
 	}
 
+	if b.SkipBz2 != nil {
+		published.SkipBz2 = *b.SkipBz2
+	}
+
 	if b.AcquireByHash != nil {
 		published.AcquireByHash = *b.AcquireByHash
 	}
diff --git a/cmd/publish_repo.go b/cmd/publish_repo.go
index cc9f5a03339debd639da264faf415a31891ab1e7..3e357cb8f9a3d367a863321cdae7a8a8094afd10 100644
--- a/cmd/publish_repo.go
+++ b/cmd/publish_repo.go
@@ -42,6 +42,7 @@ Example:
 	cmd.Flag.Bool("batch", false, "run GPG with detached tty")
 	cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
 	cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+	cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
 	cmd.Flag.String("origin", "", "origin name to publish")
 	cmd.Flag.String("notautomatic", "", "set value for NotAutomatic field")
 	cmd.Flag.String("butautomaticupgrades", "", "set  value for ButAutomaticUpgrades field")
diff --git a/cmd/publish_snapshot.go b/cmd/publish_snapshot.go
index 2f79cc59bcf2cb32fed05fa6e9b10ee2b0ac7007..5b02a6be26c889db63088726cca9dc70993a563c 100644
--- a/cmd/publish_snapshot.go
+++ b/cmd/publish_snapshot.go
@@ -139,6 +139,11 @@ func aptlyPublishSnapshotOrRepo(cmd *commander.Command, args []string) error {
 		published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool)
 	}
 
+	published.SkipBz2 = context.Config().SkipBz2Publishing
+	if context.Flags().IsSet("skip-bz2") {
+		published.SkipBz2 = context.Flags().Lookup("skip-bz2").Value.Get().(bool)
+	}
+
 	if context.Flags().IsSet("acquire-by-hash") {
 		published.AcquireByHash = context.Flags().Lookup("acquire-by-hash").Value.Get().(bool)
 	}
@@ -228,6 +233,7 @@ Example:
 	cmd.Flag.Bool("batch", false, "run GPG with detached tty")
 	cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
 	cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+	cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
 	cmd.Flag.String("origin", "", "overwrite origin name to publish")
 	cmd.Flag.String("notautomatic", "", "overwrite value for NotAutomatic field")
 	cmd.Flag.String("butautomaticupgrades", "", "overwrite value for ButAutomaticUpgrades field")
diff --git a/cmd/publish_switch.go b/cmd/publish_switch.go
index e093c4ce542bd2273f52865ad56cf3e4f8e5ee48..0784fba3fb835ed47a6a20feddc3afbd7eaa96c5 100644
--- a/cmd/publish_switch.go
+++ b/cmd/publish_switch.go
@@ -96,6 +96,10 @@ func aptlyPublishSwitch(cmd *commander.Command, args []string) error {
 		published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool)
 	}
 
+	if context.Flags().IsSet("skip-bz2") {
+		published.SkipBz2 = context.Flags().Lookup("skip-bz2").Value.Get().(bool)
+	}
+
 	err = published.Publish(context.PackagePool(), context, collectionFactory, signer, context.Progress(), forceOverwrite)
 	if err != nil {
 		return fmt.Errorf("unable to publish: %s", err)
@@ -153,6 +157,7 @@ This command would switch published repository (with one component) named ppa/wh
 	cmd.Flag.Bool("batch", false, "run GPG with detached tty")
 	cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
 	cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+	cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
 	cmd.Flag.String("component", "", "component names to update (for multi-component publishing, separate components with commas)")
 	cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch")
 	cmd.Flag.Bool("skip-cleanup", false, "don't remove unreferenced files in prefix/component")
diff --git a/cmd/publish_update.go b/cmd/publish_update.go
index 2e56798e29386d5a9582780d06f8b96db30696eb..fcdea8ed65ef2a0518e76c46725ca88c37b1e76d 100644
--- a/cmd/publish_update.go
+++ b/cmd/publish_update.go
@@ -60,6 +60,10 @@ func aptlyPublishUpdate(cmd *commander.Command, args []string) error {
 		published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool)
 	}
 
+	if context.Flags().IsSet("skip-bz2") {
+		published.SkipBz2 = context.Flags().Lookup("skip-bz2").Value.Get().(bool)
+	}
+
 	err = published.Publish(context.PackagePool(), context, collectionFactory, signer, context.Progress(), forceOverwrite)
 	if err != nil {
 		return fmt.Errorf("unable to publish: %s", err)
@@ -112,6 +116,7 @@ Example:
 	cmd.Flag.Bool("batch", false, "run GPG with detached tty")
 	cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG")
 	cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes")
+	cmd.Flag.Bool("skip-bz2", false, "don't generate bzipped indexes")
 	cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch")
 	cmd.Flag.Bool("skip-cleanup", false, "don't remove unreferenced files in prefix/component")
 
diff --git a/completion.d/_aptly b/completion.d/_aptly
index 1ab0803455363044664f901056115b1dfed41204..505c0609f06035925e1b17789a7d298931f74e98 100644
--- a/completion.d/_aptly
+++ b/completion.d/_aptly
@@ -446,6 +446,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
                             "-passphrase-file=[GPG passphrase−file for the key (warning: could be insecure)]:passphrase file:_files"
                             "-secret-keyring=[GPG secret keyring to use (instead of default)]:secret-keyring:_files"
                             "-skip-contents=[don’t generate Contents indexes]:$bool"
+                            "-skip-bz2=[don't generate bzipped indexes]:$bool"
                             "-skip-signing=[don’t sign Release files with GPG]:$bool"
                 )
                 local components_options=(
diff --git a/completion.d/aptly b/completion.d/aptly
index 6b7cc598e46366a9bc1ad1bc1832bb178aac148f..afddd63d3f34bd7698ef83df7cf7d1c26c92b5e9 100644
--- a/completion.d/aptly
+++ b/completion.d/aptly
@@ -503,7 +503,7 @@ _aptly()
           "snapshot"|"repo")
             if [[ $numargs -eq 0 ]]; then
               if [[ "$cur" == -* ]]; then
-                COMPREPLY=($(compgen -W "-acquire-by-hash -batch -butautomaticupgrades= -component= -distribution= -force-overwrite -gpg-key= -keyring= -label= -suite= -notautomatic= -origin= -passphrase= -passphrase-file= -secret-keyring= -skip-contents -skip-signing" -- ${cur}))
+                COMPREPLY=($(compgen -W "-acquire-by-hash -batch -butautomaticupgrades= -component= -distribution= -force-overwrite -gpg-key= -keyring= -label= -suite= -notautomatic= -origin= -passphrase= -passphrase-file= -secret-keyring= -skip-contents -skip-bz2 -skip-signing" -- ${cur}))
               else
                 if [[ "$subcmd" == "snapshot" ]]; then
                   COMPREPLY=($(compgen -W "$(__aptly_snapshot_list)" -- ${cur}))
@@ -528,7 +528,7 @@ _aptly()
           "update")
             if [[ $numargs -eq 0 ]]; then
               if [[ "$cur" == -* ]]; then
-                COMPREPLY=($(compgen -W "-batch -force-overwrite -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-signing" -- ${cur}))
+                COMPREPLY=($(compgen -W "-batch -force-overwrite -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-bz2 -skip-signing" -- ${cur}))
               else
                 COMPREPLY=($(compgen -W "$(__aptly_published_distributions)" -- ${cur}))
               fi
@@ -543,7 +543,7 @@ _aptly()
           "switch")
             if [[ $numargs -eq 0 ]]; then
               if [[ "$cur" == -* ]]; then
-                COMPREPLY=($(compgen -W "-batch -force-overwrite -component= -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-signing" -- ${cur}))
+                COMPREPLY=($(compgen -W "-batch -force-overwrite -component= -gpg-key= -keyring= -passphrase= -passphrase-file= -secret-keyring= -skip-cleanup -skip-contents -skip-bz2 -skip-signing" -- ${cur}))
               else
                 COMPREPLY=($(compgen -W "$(__aptly_published_distributions)" -- ${cur}))
               fi
diff --git a/deb/index_files.go b/deb/index_files.go
index 5e711d90b7a4d87638d482b1b748b1830f504c39..d8fb7dc5ab94158fbf30e7698f1dfce767e41959 100644
--- a/deb/index_files.go
+++ b/deb/index_files.go
@@ -22,6 +22,7 @@ type indexFiles struct {
 	suffix           string
 	indexes          map[string]*indexFile
 	acquireByHash    bool
+	skipBz2          bool
 }
 
 type indexFile struct {
@@ -68,7 +69,7 @@ func (file *indexFile) Finalize(signer pgp.Signer) error {
 	}
 
 	if file.compressable {
-		err = utils.CompressFile(file.tempFile, file.onlyGzip)
+		err = utils.CompressFile(file.tempFile, file.onlyGzip || file.parent.skipBz2)
 		if err != nil {
 			file.tempFile.Close()
 			return fmt.Errorf("unable to compress index file: %s", err)
@@ -80,11 +81,15 @@ func (file *indexFile) Finalize(signer pgp.Signer) error {
 	exts := []string{""}
 	cksumExts := exts
 	if file.compressable {
-		exts = append(exts, ".gz", ".bz2")
-		cksumExts = exts
 		if file.onlyGzip {
 			exts = []string{".gz"}
 			cksumExts = []string{"", ".gz"}
+		} else {
+			exts = append(exts, ".gz")
+			if !file.parent.skipBz2 {
+				exts = append(exts, ".bz2")
+			}
+			cksumExts = exts
 		}
 	}
 
@@ -229,7 +234,7 @@ func packageIndexByHash(file *indexFile, ext string, hash string, sum string) er
 	return nil
 }
 
-func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, suffix string, acquireByHash bool) *indexFiles {
+func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, suffix string, acquireByHash bool, skipBz2 bool) *indexFiles {
 	return &indexFiles{
 		publishedStorage: publishedStorage,
 		basePath:         basePath,
@@ -239,6 +244,7 @@ func newIndexFiles(publishedStorage aptly.PublishedStorage, basePath, tempDir, s
 		suffix:           suffix,
 		indexes:          make(map[string]*indexFile),
 		acquireByHash:    acquireByHash,
+		skipBz2:          skipBz2,
 	}
 }
 
diff --git a/deb/publish.go b/deb/publish.go
index 9a423c75968d954425baa76e2b5d841ca8039f83..a510fab604895b08ed0fc17cc7e56c2b39dc0b15 100644
--- a/deb/publish.go
+++ b/deb/publish.go
@@ -62,6 +62,9 @@ type PublishedRepo struct {
 	// Skip contents generation
 	SkipContents bool
 
+	// Skip bz2 compression for index files
+	SkipBz2 bool
+
 	// True if repo is being re-published
 	rePublishing bool
 
@@ -581,7 +584,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
 	}
 	defer os.RemoveAll(tempDir)
 
-	indexes := newIndexFiles(publishedStorage, basePath, tempDir, suffix, p.AcquireByHash)
+	indexes := newIndexFiles(publishedStorage, basePath, tempDir, suffix, p.AcquireByHash, p.SkipBz2)
 
 	legacyContentIndexes := map[string]*ContentsIndex{}
 	var count int64
diff --git a/system/t02_config/ConfigShowTest_gold b/system/t02_config/ConfigShowTest_gold
index 36cebcb246a9d6b5377e6d8e91ef97c0988953db..57b42b6aab85a06f358664e9561b5d68ab7672a2 100644
--- a/system/t02_config/ConfigShowTest_gold
+++ b/system/t02_config/ConfigShowTest_gold
@@ -19,6 +19,7 @@
     "ppaDistributorID": "ubuntu",
     "ppaCodename": "",
     "skipContentsPublishing": false,
+    "skipBz2Publishing": false,
     "FileSystemPublishEndpoints": {},
     "S3PublishEndpoints": {},
     "SwiftPublishEndpoints": {},
diff --git a/system/t02_config/CreateConfigTest_gold b/system/t02_config/CreateConfigTest_gold
index 2c9c4bda845763ba83c315a210fc0f943c040c2c..7d1a23e161562d64027a2bf8715f98b9e0dc1bea 100644
--- a/system/t02_config/CreateConfigTest_gold
+++ b/system/t02_config/CreateConfigTest_gold
@@ -19,6 +19,7 @@
   "ppaDistributorID": "ubuntu",
   "ppaCodename": "",
   "skipContentsPublishing": false,
+  "skipBz2Publishing": false,
   "FileSystemPublishEndpoints": {},
   "S3PublishEndpoints": {},
   "SwiftPublishEndpoints": {},
diff --git a/system/t06_publish/PublishRepo33Test_gold b/system/t06_publish/PublishRepo33Test_gold
new file mode 100644
index 0000000000000000000000000000000000000000..365295fa90e675786d820462699d5787561b11c0
--- /dev/null
+++ b/system/t06_publish/PublishRepo33Test_gold
@@ -0,0 +1,14 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+
+Local repo local-repo has been successfully published.
+Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
+Now you can add following line to apt sources:
+  deb http://your-server/ maverick main
+  deb-src http://your-server/ maverick main
+Don't forget to add your GPG key to apt with apt-key.
+
+You can also use `aptly serve` to publish your repositories over HTTP quickly.
diff --git a/system/t06_publish/PublishSnapshot40Test_gold b/system/t06_publish/PublishSnapshot40Test_gold
new file mode 100644
index 0000000000000000000000000000000000000000..57150a7d3c2580aca8dcb03b53c4833c758f76d9
--- /dev/null
+++ b/system/t06_publish/PublishSnapshot40Test_gold
@@ -0,0 +1,13 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+
+Snapshot snap40 has been successfully published.
+Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
+Now you can add following line to apt sources:
+  deb http://your-server/ maverick main
+Don't forget to add your GPG key to apt with apt-key.
+
+You can also use `aptly serve` to publish your repositories over HTTP quickly.
diff --git a/system/t06_publish/PublishSwitch15Test_gold b/system/t06_publish/PublishSwitch15Test_gold
new file mode 100644
index 0000000000000000000000000000000000000000..3f440f06d99243b07fe0d25387d8d0cb1e639f0b
--- /dev/null
+++ b/system/t06_publish/PublishSwitch15Test_gold
@@ -0,0 +1,8 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+Cleaning up prefix "." components main...
+
+Publish for snapshot ./maverick (origin: LP-PPA-gladky-anton-gnuplot) [amd64, i386] publishes {main: [snap3]: Pulled into 'snap2' with 'snap1' as source, pull request was: 'gnuplot-x11'} has been successfully switched to new snapshot.
diff --git a/system/t06_publish/PublishUpdate13Test_gold b/system/t06_publish/PublishUpdate13Test_gold
new file mode 100644
index 0000000000000000000000000000000000000000..72e92234f6f8f6a0809394435b9f3bad53853491
--- /dev/null
+++ b/system/t06_publish/PublishUpdate13Test_gold
@@ -0,0 +1,8 @@
+Loading packages...
+Generating metadata files and linking package files...
+Finalizing metadata files...
+Signing file 'Release' with gpg, please enter your passphrase when prompted:
+Clearsigning file 'Release' with gpg, please enter your passphrase when prompted:
+Cleaning up prefix "." components main...
+
+Publish for local repo ./maverick [i386, source] publishes {main: [local-repo]} has been successfully updated.
diff --git a/system/t06_publish/repo.py b/system/t06_publish/repo.py
index 9b36f60e8dc8560bba706dd6613d972343dc23ab..fd3409d68ecb913b75cb2df20de43a6959df2b67 100644
--- a/system/t06_publish/repo.py
+++ b/system/t06_publish/repo.py
@@ -29,8 +29,7 @@ class PublishRepo1Test(BaseTest):
 
         self.check_exists('public/dists/maverick/main/binary-i386/Packages')
         self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
-        self.check_exists(
-            'public/dists/maverick/main/binary-i386/Packages.bz2')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
         self.check_exists('public/dists/maverick/main/Contents-i386.gz')
         self.check_exists('public/dists/maverick/main/source/Sources')
         self.check_exists('public/dists/maverick/main/source/Sources.gz')
@@ -862,3 +861,30 @@ class PublishRepo32Test(BaseTest):
                       "--verify", os.path.join(
                           os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
                       os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
+
+
+class PublishRepo33Test(BaseTest):
+    """
+    publish repo: -skip-bz2
+    """
+    fixtureCmds = [
+        "aptly repo create local-repo",
+        "aptly repo add local-repo ${files} ${udebs}",
+    ]
+    runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 local-repo"
+    gold_processor = BaseTest.expand_environ
+
+    def check(self):
+        super(PublishRepo33Test, self).check()
+
+        self.check_exists('public/dists/maverick/Release')
+
+        self.check_exists('public/dists/maverick/main/binary-i386/Release')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+
+        self.check_exists('public/dists/maverick/main/binary-amd64/Release')
+        self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
+        self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
diff --git a/system/t06_publish/snapshot.py b/system/t06_publish/snapshot.py
index 938d006b0e219a9c4fefbe819388e7ca6f747e9b..8f4e3088eb1b2a8f441dfcb5edfbb34f61609e13 100644
--- a/system/t06_publish/snapshot.py
+++ b/system/t06_publish/snapshot.py
@@ -1210,3 +1210,32 @@ class PublishSnapshot39Test(BaseTest):
                                  'contents_i386', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
         self.check_file_contents('public/dists/maverick/main/Contents-amd64.gz',
                                  'contents_amd64', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
+
+
+class PublishSnapshot40Test(BaseTest):
+    """
+    publish snapshot: -skip-bz2
+    """
+    fixtureDB = True
+    fixturePool = True
+    fixtureCmds = [
+        "aptly snapshot create snap40 from mirror gnuplot-maverick",
+    ]
+    runCmd = "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -skip-bz2 snap40"
+    gold_processor = BaseTest.expand_environ
+
+    def check(self):
+        super(PublishSnapshot40Test, self).check()
+
+        self.check_exists('public/dists/maverick/Release')
+        self.check_exists('public/dists/maverick/Release.gpg')
+
+        self.check_exists('public/dists/maverick/main/binary-i386/Release')
+        self.check_exists('public/dists/maverick/main/binary-amd64/Release')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+
+        self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
+        self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
diff --git a/system/t06_publish/switch.py b/system/t06_publish/switch.py
index 4f8733977a64332fb33ddbf792f71c54ca765528..6a86a3cc434b4b309aca168e2672c361bb47e575 100644
--- a/system/t06_publish/switch.py
+++ b/system/t06_publish/switch.py
@@ -545,3 +545,32 @@ class PublishSwitch14Test(BaseTest):
                              'main/binary-amd64/Release', 'main/binary-i386/Release', 'main/Contents-amd64.gz',
                              'main/Contents-i386.gz', 'Contents-i386.gz', 'Contents-amd64.gz']):
             raise Exception("path seen wrong: %r" % (pathsSeen, ))
+
+
+class PublishSwitch15Test(BaseTest):
+    """
+    publish switch: -skip-bz2
+    """
+    fixtureDB = True
+    fixturePool = True
+    fixtureCmds = [
+        "aptly snapshot create snap1 from mirror gnuplot-maverick",
+        "aptly snapshot create snap2 empty",
+        "aptly snapshot pull -no-deps -architectures=i386,amd64 snap2 snap1 snap3 gnuplot-x11",
+        "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 snap1",
+    ]
+    runCmd = "aptly publish switch -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec maverick snap3"
+    gold_processor = BaseTest.expand_environ
+
+    def check(self):
+        super(PublishSwitch15Test, self).check()
+
+        self.check_exists('public/dists/maverick/Release')
+
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
+
+        self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
+        self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
diff --git a/system/t06_publish/update.py b/system/t06_publish/update.py
index b2acbfe861c4af21f2b50ff442275a87c4d23014..d3cb443f604424a2c9ce2ce61a01a73c5bec9b1b 100644
--- a/system/t06_publish/update.py
+++ b/system/t06_publish/update.py
@@ -437,3 +437,28 @@ class PublishUpdate12Test(BaseTest):
                              'main/binary-i386/Release', 'main/source/Release', 'main/Contents-i386.gz',
                              'Contents-i386.gz']):
             raise Exception("path seen wrong: %r" % (pathsSeen, ))
+
+
+class PublishUpdate13Test(BaseTest):
+    """
+    publish update: -skip-bz2
+    """
+    fixtureCmds = [
+        "aptly repo create local-repo",
+        "aptly repo add local-repo ${files}/",
+        "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 local-repo",
+        "aptly repo remove local-repo pyspi"
+    ]
+    runCmd = "aptly publish update -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -skip-bz2 maverick"
+    gold_processor = BaseTest.expand_environ
+
+    def check(self):
+        super(PublishUpdate13Test, self).check()
+
+        self.check_exists('public/dists/maverick/InRelease')
+        self.check_exists('public/dists/maverick/Release')
+        self.check_exists('public/dists/maverick/Release.gpg')
+
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages')
+        self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
+        self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
diff --git a/utils/config.go b/utils/config.go
index 33e172791fcad647009513d4c07a0bf53c9c8707..2b60d6c6d1ae36fc54d9cfc09538c4e8fcca3856 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -28,6 +28,7 @@ type ConfigStructure struct { // nolint: maligned
 	PpaDistributorID       string                           `json:"ppaDistributorID"`
 	PpaCodename            string                           `json:"ppaCodename"`
 	SkipContentsPublishing bool                             `json:"skipContentsPublishing"`
+	SkipBz2Publishing      bool                             `json:"skipBz2Publishing"`
 	FileSystemPublishRoots map[string]FileSystemPublishRoot `json:"FileSystemPublishEndpoints"`
 	S3PublishRoots         map[string]S3PublishRoot         `json:"S3PublishEndpoints"`
 	SwiftPublishRoots      map[string]SwiftPublishRoot      `json:"SwiftPublishEndpoints"`
diff --git a/utils/config_test.go b/utils/config_test.go
index 6cb1718201771abddbda7ed34f71b7ecad934b93..3dc523c4431b8d2542167955d643ff94cf2561d2 100644
--- a/utils/config_test.go
+++ b/utils/config_test.go
@@ -79,6 +79,7 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
 		"  \"ppaDistributorID\": \"\",\n"+
 		"  \"ppaCodename\": \"\",\n"+
 		"  \"skipContentsPublishing\": false,\n"+
+		"  \"skipBz2Publishing\": false,\n"+
 		"  \"FileSystemPublishEndpoints\": {\n"+
 		"    \"test\": {\n"+
 		"      \"rootDir\": \"/opt/aptly-publish\",\n"+