diff --git a/data/glade/plugins_window.glade b/data/glade/plugins_window.glade
index 425d77dd70571f7746d71cc8bcfc9620efd9c5ec..4830f0c88f7a770a799c11a86bf3f044329f9341 100644
--- a/data/glade/plugins_window.glade
+++ b/data/glade/plugins_window.glade
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Mon Jun  9 15:22:01 2008 -->
+<!--Generated with glade3 3.4.5 on Thu Jun 19 13:11:54 2008 -->
 <glade-interface>
   <widget class="GtkWindow" id="plugins_window">
     <property name="width_request">650</property>
@@ -242,6 +242,7 @@
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
                             <property name="response_id">0</property>
+                            <signal name="clicked" handler="on_uninstall_plugin_button_clicked"/>
                             <child>
                               <widget class="GtkHBox" id="hbox11">
                                 <property name="visible">True</property>
@@ -270,6 +271,7 @@
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
                             <property name="response_id">0</property>
+                            <signal name="clicked" handler="on_configure_plugin_button_clicked"/>
                             <child>
                               <widget class="GtkHBox" id="hbox12">
                                 <property name="visible">True</property>
diff --git a/plugins/acronyms_expander.py b/plugins/acronyms_expander.py
index bca5fd04aa1a2256ac6bea245be5b95c58a222a3..dda47cf17efa0d838264fb98094859c2e7478dfe 100644
--- a/plugins/acronyms_expander.py
+++ b/plugins/acronyms_expander.py
@@ -44,6 +44,8 @@ class AcronymsExpanderPlugin(GajimPlugin):
 		#super(AcronymsExpanderPlugin, self).__init__()
 		
 	def init(self):
+		self.config_dialog = None
+		
 		self.gui_extension_points = {
 			'chat_control_base' : (self.connect_with_chat_control_base,
 								   self.disconnect_from_chat_control_base)
diff --git a/plugins/length_notifier.py b/plugins/length_notifier.py
index 3845d3061f12cf593f22e46b3bf1332f702e28cb..7c14812e507c24da462e6665e3d0f16aa3a4023d 100644
--- a/plugins/length_notifier.py
+++ b/plugins/length_notifier.py
@@ -45,6 +45,8 @@ class LengthNotifierPlugin(GajimPlugin):
 	
 	@log_calls('LengthNotifierPlugin')
 	def init(self):
+		#self.config_dialog = None
+		
 		self.gui_extension_points = {
 			'chat_control' : (self.connect_with_chat_control,
 							  self.disconnect_from_chat_control)
diff --git a/plugins/roster_buttons/plugin.py b/plugins/roster_buttons/plugin.py
index 7e56710466d65cdae917eb2214c592d893df6ded..a1aa294827342129cc3c71b952a04d2a4232a2e8 100644
--- a/plugins/roster_buttons/plugin.py
+++ b/plugins/roster_buttons/plugin.py
@@ -52,6 +52,8 @@ class RosterButtonsPlugin(GajimPlugin):
 		
 		self.roster_vbox = gajim.interface.roster.xml.get_widget('roster_vbox2')
 		self.show_offline_contacts_menuitem = gajim.interface.roster.xml.get_widget('show_offline_contacts_menuitem')
+		
+		self.config_dialog = None
 	
 	@log_calls('RosterButtonsPlugin')
 	def activate(self):
diff --git a/src/plugins/gui.py b/src/plugins/gui.py
index 8aa0f3f79b74ccfe2f9a4a8c298771832b18ea2a..5d1576bba6c2fd18b96258d484bdee031456c8ef 100644
--- a/src/plugins/gui.py
+++ b/src/plugins/gui.py
@@ -117,7 +117,10 @@ class PluginsWindow(object):
 		desc_textbuffer.set_text(plugin.description)
 		self.plugin_description_textview.set_property('sensitive', True)
 		self.uninstall_plugin_button.set_property('sensitive', True)
-		self.configure_plugin_button.set_property('sensitive', True)
+		if plugin.config_dialog is None:
+			self.configure_plugin_button.set_property('sensitive', False)
+		else:
+			self.configure_plugin_button.set_property('sensitive', True)
 		
 	def _clear_installed_plugin_info(self):
 		self.plugin_name_label.set_text('')
@@ -163,4 +166,54 @@ class PluginsWindow(object):
 
 	@log_calls('PluginsWindow')
 	def on_close_button_clicked(self, widget):
-		self.window.destroy()
\ No newline at end of file
+		self.window.destroy()
+	
+	@log_calls('PluginsWindow')
+	def on_configure_plugin_button_clicked(self, widget):
+		log.debug('widget: %s'%(widget))
+		selection = self.installed_plugins_treeview.get_selection()
+		model, iter = selection.get_selected()
+		if iter:
+			plugin = model.get_value(iter, 0)
+			plugin_name = model.get_value(iter, 1)
+			is_active = model.get_value(iter, 2)
+			
+
+			result = plugin.config_dialog.run(self.window)
+
+		else:
+			# No plugin selected. this should never be reached. As configure
+			# plugin button should only my clickable when plugin is selected.
+			# XXX: maybe throw exception here?
+			pass
+	
+	@log_calls('PluginsWindow')
+	def on_uninstall_plugin_button_clicked(self, widget):
+		pass
+
+	
+class GajimPluginConfigDialog(gtk.Dialog):
+	
+	@log_calls('GajimPluginConfigDialog')
+	def __init__(self, plugin, **kwargs):
+		# TRANSLATORS: The window title for the generic configuration dialog of plugins
+		gtk.Dialog.__init__(self, '%s : %s'%(_('Configuration'), plugin.name), **kwargs)
+		self.plugin = plugin
+		self.add_button('gtk-close', gtk.RESPONSE_CLOSE)
+	
+		self.main = self.child
+		self.main.set_spacing(3)
+	
+		# TRANSLATORS: Short text stating which plugin a configuration dialog is for
+		label = gtk.Label(_('<b>%s Configuration</b>') % (plugin.name))
+		label.set_markup(label.get_label())
+		self.main.pack_start(label, False, False)
+		
+	@log_calls('GajimPluginConfigDialog')
+	def run(self, parent=None):
+		self.reparent(parent)
+		self.show_all()
+		result =  super(GajimPluginConfigDialog, self).run()
+		self.hide()
+		return result
+	
\ No newline at end of file
diff --git a/src/plugins/plugin.py b/src/plugins/plugin.py
index 1d5c1a9dc64e0abefb79bdd6241a483737c696df..27406edb0905d9d0db12dee432d1de5fe2703faa 100644
--- a/src/plugins/plugin.py
+++ b/src/plugins/plugin.py
@@ -27,6 +27,7 @@ Base class for implementing plugin.
 import os
 
 from plugins.helpers import log_calls
+from plugins.gui import GajimPluginConfigDialog
 
 class GajimPlugin(object):
 	'''
@@ -96,28 +97,29 @@ class GajimPlugin(object):
 	
 	@log_calls('GajimPlugin')
 	def __init__(self):
-		self.config = Config()
+		self.config = GajimPluginConfig()
 		'''
 		Plug-in configuration dictionary.
 		
 		Automatically saved and loaded and plug-in (un)load.
 		
-		:type: `plugins.plugin.Config`
+		:type: `plugins.plugin.GajimPluginConfig`
 		'''
 		self.load_config()
+		self.config_dialog = GajimPluginConfigDialog(self)
 		self.init()
 	
 	@log_calls('GajimPlugin')
 	def save_config(self):
-		pass
+		self.config.save()
 	
 	@log_calls('GajimPlugin')	
 	def load_config(self):
-		pass
+		self.config.load()
 	
 	@log_calls('GajimPlugin')
 	def __del__(self):
-		self._save_config()
+		self.save_config()
 		
 	@log_calls('GajimPlugin')
 	def local_file_path(self, file_name):
@@ -135,5 +137,11 @@ class GajimPlugin(object):
 	def deactivate(self):
 		pass
 
-class Config(dict):
-	pass
\ No newline at end of file
+class GajimPluginConfig(dict):
+	@log_calls('GajimPluginConfig')
+	def save(self):
+		pass
+	
+	@log_calls('GajimPluginConfig')
+	def load(self):
+		pass