diff --git a/src/com/cooliris/picasa/GDataClient.java b/src/com/cooliris/picasa/GDataClient.java
index a2e2be2..b156347 100644
--- a/src/com/cooliris/picasa/GDataClient.java
+++ b/src/com/cooliris/picasa/GDataClient.java
@@ -32,6 +32,7 @@
 import org.apache.http.conn.scheme.PlainSocketFactory;
 import org.apache.http.conn.scheme.Scheme;
 import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.entity.InputStreamEntity;
 import org.apache.http.impl.client.DefaultHttpClient;
@@ -70,6 +71,7 @@
         // Register HTTP protocol.
         SchemeRegistry schemeRegistry = new SchemeRegistry();
         schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
+        schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
 
         // Create the connection manager.
         HTTP_CONNECTION_MANAGER = new ThreadSafeClientConnManager(params, schemeRegistry);
diff --git a/src/com/cooliris/picasa/PicasaApi.java b/src/com/cooliris/picasa/PicasaApi.java
index 90f3db1..d7f214a 100644
--- a/src/com/cooliris/picasa/PicasaApi.java
+++ b/src/com/cooliris/picasa/PicasaApi.java
@@ -28,10 +28,12 @@
 import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
 import android.app.Activity;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.SyncResult;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.util.Log;
 import android.util.Xml;
 
@@ -41,7 +43,8 @@
     public static final int RESULT_ERROR = 2;
 
     private static final String TAG = "PicasaAPI";
-    private static final String BASE_URL = "http://picasaweb.google.com/data/feed/api/";
+    private static final String SETTINGS_PICASA_GDATA_BASE_URL_KEY = "picasa_gdata_base_url";
+    private static final String DEFAULT_BASE_URL = "https://picasaweb.google.com/data/feed/api/";
     private static final String BASE_QUERY_STRING;
 
     static {
@@ -54,6 +57,7 @@
         BASE_QUERY_STRING = query.toString() + "&visibility=visible";
     }
 
+    private final ContentResolver mContentResolver;
     private final GDataClient mClient;
     private final GDataClient.Operation mOperation = new GDataClient.Operation();
     private final GDataParser mParser = new GDataParser();
@@ -151,7 +155,8 @@
         return username;
     }
 
-    public PicasaApi() {
+    public PicasaApi(ContentResolver cr) {
+        mContentResolver = cr;
         mClient = new GDataClient();
     }
 
@@ -164,7 +169,9 @@
 
     public int getAlbums(AccountManager accountManager, SyncResult syncResult, UserEntry user, GDataParser.EntryHandler handler) {
         // Construct the query URL for user albums.
-        StringBuilder builder = new StringBuilder(BASE_URL);
+        String baseUrl = Settings.Secure.getString(mContentResolver,
+                SETTINGS_PICASA_GDATA_BASE_URL_KEY);
+        StringBuilder builder = new StringBuilder(baseUrl != null ? baseUrl : DEFAULT_BASE_URL);
         builder.append("user/");
         builder.append(Uri.encode(mAuth.user));
         builder.append(BASE_QUERY_STRING);
@@ -237,7 +244,9 @@
     public int getAlbumPhotos(AccountManager accountManager, SyncResult syncResult, AlbumEntry album,
             GDataParser.EntryHandler handler) {
         // Construct the query URL for user albums.
-        StringBuilder builder = new StringBuilder(BASE_URL);
+        String baseUrl = Settings.Secure.getString(mContentResolver,
+                SETTINGS_PICASA_GDATA_BASE_URL_KEY);
+        StringBuilder builder = new StringBuilder(baseUrl != null ? baseUrl : DEFAULT_BASE_URL);
         builder.append("user/");
         builder.append(Uri.encode(mAuth.user));
         builder.append("/albumid/");
diff --git a/src/com/cooliris/picasa/PicasaContentProvider.java b/src/com/cooliris/picasa/PicasaContentProvider.java
index 870c7f1..4211fcf 100644
--- a/src/com/cooliris/picasa/PicasaContentProvider.java
+++ b/src/com/cooliris/picasa/PicasaContentProvider.java
@@ -516,7 +516,7 @@
 
         // A connection to the Picasa API for a specific user account. Initially
         // null.
-        public PicasaApi api = new PicasaApi();
+        public PicasaApi api = new PicasaApi(getContext().getContentResolver());
 
         // A handle to the Picasa databse.
         public SQLiteDatabase db;
